Verwenden Sie $^array
.
Es verwandelt das Array in eine Art Klammererweiterung des Arrays. Wie in , wenn a=(foo bar baz)
, $^a
würde wie ein bisschen sein {foo,bar,baz}
.
$ a=(foo bar baz)
$ echo prefix${^a}suffix
prefixfoosuffix prefixbarsuffix prefixbazsuffix
Für Multiplexing- Arrays:
$ a=(1 2 3) b=(a b c)
$ echo $^a$^b
1a 1b 1c 2a 2b 2c 3a 3b 3c
Wenn das Präfix oder Suffix Shell-Sonderzeichen enthält (so ;
werden Befehle oder Leerzeichen getrennt, die Wörter trennen, oder $"'&*[?~
...), müssen diese natürlich in Anführungszeichen gesetzt werden:
echo 'p r e f i x '$^a' s u f f i x'
das gleiche wie für csh
's (und bash, ksh, zsh's):
echo 'p r e f i x '{foo,bar,baz}' s u f f i x'
$^a
selbst darf nicht zitiert werden, "foo${^a}bar"
würde sich als ein Wort erweitern. Ein Fall, in dem Sie $^array
zitiert werden möchten , ist der gleiche, in dem $array
Sie leere Elemente beibehalten möchten. Dann müssen Sie die Array-Erweiterung zitieren und das (@)
Flag oder die "${array[@]}"
Syntax verwenden (die an die Bourne-Shell erinnert "$@"
):
$ 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>
<>
echo "number ${^$(seq 3)} "
->number 1
2
3
oderZ=( $(seq 3) ); echo "number ${^Z}"
->number 1 2 3
echo "number "${^$(seq 3)}""
würde es funktionieren. Ich habe noch nie doppelte Anführungszeichen in solchen doppelten Anführungszeichen gesehen. Sehr merkwürdig. Sehr schwer zu merken .. aber danke!${^(seq 3)}
, siehe Bearbeiten.