Zsh
zsh - 如何為數組的每個元素添加一個字元串?
假設我有一個 zsh 數組
ARRAY=(a b c)
,並希望
my_
在數組中的每個元素之前添加(my_a my_b my_c)
,我怎麼做?
幾個選項:
使用
^
用於該目的的運算符(讓人想起rc
’s^
):ARRAY=(my_$^ARRAY)
或者使這種擴展成為預設值(以
rc
or的樣式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 的影響。