假设我有一个 zsh 数组ARRAY=(a b c)
,
并希望my_
在数组中的每个元素之前添加(my_a my_b my_c)
,
我怎么做?
答案1
几个选项:
使用专用^
于该目的的运算符(让人想起rc
's ^
):
ARRAY=(my_$^ARRAY)
或者将这种扩展设置为默认扩展(以rc
or的风格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 的影响。