Bash
為什麼是“${ARRAY@@@}’ 擴展成多個單詞,當它被引用時?
我不明白為什麼
"${ARRAY[@]}"
在引用()時會擴展到多個單詞"..."
?舉個例子:
IFS=":" read -ra ARRAY <<< "foo:bar:baz" for e in "${ARRAY[@]}"; do echo $e; done foo bar baz
我在引號中擴展的任何其他變數,比如
"${VAR}"
,都會產生一個單詞:VAR="foo bar baz" for a in "${VAR}"; do echo $a; done foo bar baz
任何人都可以向 Linux 新手解釋這一點嗎?
因為使用
@
雙引號索引的數組會擴展為元素列表。它記錄在man bash
“數組”下:如果單詞是雙引號, …
${name[@]}
將 name 的每個元素擴展為一個單獨的單詞。如果元素包含來自 $IFS 變數的空格或字元,則需要此行為。
#!/bin/bash arr=(a 'b c' d) for el in ${arr[@]} ; do echo "1: $el" ; done for el in "${arr[@]}" ; do echo "2: $el" ; done
輸出:
1: a 1: b 1: c 1: d 2: a 2: b c 2: d
如果您希望將數組擴展為單個字元串(數組元素由 的第一個字元分隔
$IFS
,預設情況下為空格),則使用"${arr[*]}"
.數組擴展的
"${arr[@]}"
and"${arr[*]}"
語法類似於位置參數的"$@"
and"$*"
。