Sử dụng $^array
.
Nó biến mảng thành một kiểu mở rộng cú đúp của mảng. Như trong khi a=(foo bar baz)
, $^a
sẽ là một chút như thế {foo,bar,baz}
.
$ a=(foo bar baz)
$ echo prefix${^a}suffix
prefixfoosuffix prefixbarsuffix prefixbazsuffix
Đối với mảng ghép kênh :
$ a=(1 2 3) b=(a b c)
$ echo $^a$^b
1a 1b 1c 2a 2b 2c 3a 3b 3c
Đương nhiên, nếu tiền tố hoặc hậu tố chứa các ký tự đặc biệt shell (như ;
phân tách các lệnh hoặc khoảng trắng phân tách các từ hoặc $"'&*[?~
...), chúng phải được trích dẫn:
echo 'p r e f i x '$^a' s u f f i x'
tương tự như đối với csh
(và bash, ksh, zsh's):
echo 'p r e f i x '{foo,bar,baz}' s u f f i x'
$^a
chính nó không được trích dẫn, "foo${^a}bar"
sẽ mở rộng như một từ. Một trường hợp mà bạn muốn $^array
được trích dẫn, tương tự như $array
khi bạn muốn bảo tồn các phần tử trống. Sau đó, bạn cần trích dẫn mở rộng mảng và sử dụng (@)
cờ hoặc "${array[@]}"
cú pháp (gợi nhớ đến vỏ 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>
<>
echo "number ${^$(seq 3)} "
->number 1
2
3
hoặcZ=( $(seq 3) ); echo "number ${^Z}"
->number 1 2 3