我不明白为什么"${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
“数组”下:如果元素包含来自 $IFS 变量的空格或字符,则需要此行为。
输出:
如果您希望将数组扩展为单个字符串(数组元素由 的第一个字符分隔
$IFS
,默认情况下为空格),则使用"${arr[*]}"
.数组扩展的
"${arr[@]}"
and"${arr[*]}"
语法类似于位置参数的"$@"
and"$*"
。