Teddy C Asked: 2022-05-06 21:03:58 +0800 CST2022-05-06 21:03:58 +0800 CST 2022-05-06 21:03:58 +0800 CST zsh - 如何为数组的每个元素添加一个字符串? 772 假设我有一个 zsh 数组ARRAY=(a b c), 并希望my_在数组中的每个元素之前添加(my_a my_b my_c), 我怎么做? zsh 1 个回答 Voted Best Answer Stéphane Chazelas 2022-05-06T21:33:37+08:002022-05-06T21:33:37+08:00 几个选项: 使用^用于该目的的运算符(让人想起rc's ^): ARRAY=(my_$^ARRAY) 或者使这种扩展成为默认值(以rcor的样式fish): set -o rcexpandparam ARRAY=(my_$ARRAY) 或 ksh93 方式¹,使用${param/pattern/replacement}with#作为主题锚的开头。 ARRAY=(${ARRAY/#/my_}) 或 csh 方式,但有一个histsubstpattern转折以允许基于模式的替换: set -o histsubstpattern ARRAY=(${ARRAY:s/#/my_}) 或使用printf: printf -v ARRAY my_%s "$ARRAY[@]" ¹ 从技术上讲,在 ksh93(或最终复制它的 bash 或 mksh)中,它必须保持ARRAY=("${ARRAY[@]/#/my_}")原样$ARRAY,${ARRAY[0]}并且在未引用时会受到 split+glob 的影响。
几个选项:
使用
^
用于该目的的运算符(让人想起rc
's^
):或者使这种扩展成为默认值(以
rc
or的样式fish
):或 ksh93 方式¹,使用
${param/pattern/replacement}
with#
作为主题锚的开头。或 csh 方式,但有一个
histsubstpattern
转折以允许基于模式的替换:或使用
printf
:¹ 从技术上讲,在 ksh93(或最终复制它的 bash 或 mksh)中,它必须保持
ARRAY=("${ARRAY[@]/#/my_}")
原样$ARRAY
,${ARRAY[0]}
并且在未引用时会受到 split+glob 的影响。