Use $^array
.
Transforma a matriz em uma espécie de expansão de chave da matriz. Como em quando a=(foo bar baz)
, $^a
seria um pouco como {foo,bar,baz}
.
$ a=(foo bar baz)
$ echo prefix${^a}suffix
prefixfoosuffix prefixbarsuffix prefixbazsuffix
Para matrizes multiplexação :
$ a=(1 2 3) b=(a b c)
$ echo $^a$^b
1a 1b 1c 2a 2b 2c 3a 3b 3c
Naturalmente, se o prefixo ou sufixo contiver caracteres especiais de shell (como ;
que separa comandos ou espaço que separam palavras ou $"'&*[?~
...), eles devem ser citados:
echo 'p r e f i x '$^a' s u f f i x'
o mesmo que para csh
(e bash, ksh, zsh's):
echo 'p r e f i x '{foo,bar,baz}' s u f f i x'
$^a
em si não deve ser citado, "foo${^a}bar"
expandiria como uma palavra. Um caso em que você deseja que $^array
seja citado, o mesmo que para $array
é quando você deseja preservar elementos vazios. Em seguida, é necessário citar a expansão da matriz e usar o sinalizador (@)
ou a sintaxe "${array[@]}"
(uma reminiscência do "$@"
do shell Bourne):
$ array=(x '')
$ printf '<%s>\n' $array # empties removed
<x>
$ printf '<%s>\n' "$array" # array elts joined with spaces
<x >
$ printf '<%s>\n' "${(@)array}" # empties preserved
<x>
<>
$ printf '<%s>\n' "$array[@]" # empties preserved
<x>
<>
$ printf '<%s>\n' $^array$^array # empty removed
<xx>
<x>
<x>
$ printf '<%s>\n' "$^array$^array" # concatenation of joined arrays
<x x >
$ printf '<%s>\n' "$^array[@]$^array[@]" # multiplexing with empties preserved
<xx>
<x>
<x>
<>