zsh - 如何在数组的每个元素前面添加一个字符串?

zsh - 如何在数组的每个元素前面添加一个字符串?

假设我有一个 zsh 数组ARRAY=(a b c)

并希望my_在数组中的每个元素之前添加(my_a my_b my_c)

我怎么做?

答案1

几个选项:

使用专用^于该目的的运算符(让人想起rc's ^):

ARRAY=(my_$^ARRAY)

或者将这种扩展设置为默认扩展(以rcor的风格fish):

set -o rcexpandparam
ARRAY=(my_$ARRAY)

或者 ksh93 方式 1,使用${param/pattern/replacement}with#作为主题锚点的开头。

ARRAY=(${ARRAY/#/my_})

或者 csh 方式,但有一个histsubstpattern变化,允许基于模式进行替换:

set -o histsubstpattern
ARRAY=(${ARRAY:s/#/my_})

或者使用printf

printf -v ARRAY my_%s "$ARRAY[@]"

1 从技术上讲,在 ksh93(或者最终也复制了它的 bash 或 mksh)中,它必须保持ARRAY=("${ARRAY[@]/#/my_}")原样$ARRAY${ARRAY[0]}并且在不加引号时会受到 split+glob 的影响。

相关内容