Zsh

zsh - 如何為數組的每個元素添加一個字元串?

  • May 8, 2022

假設我有一個 zsh 數組ARRAY=(a b c)

並希望my_在數組中的每個元素之前添加(my_a my_b my_c)

我怎麼做?

幾個選項:

使用^用於該目的的運算符(讓人想起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 的影響。

引用自:https://unix.stackexchange.com/questions/701598