根据我的 bash 手册页:If the word is double-quoted ${name[@]} expands each element of name to a separate word
.
这通常会导致完全预期的行为:
$ a=("foo 1" "bar 2")
$ for i in "${a[@]}"; do echo $i; done
foo 1
bar 2
$ size(){ echo $#;};size "${a[@]}"
2
$ [ "${a[@]}" = "foo 1 bar 2" ]&&echo ok
bash: [: too many arguments
但有时它不会:
$ [[ "${a[@]}" == "foo 1 bar 2" ]] && echo ok
ok
$ case "${a[@]}" in "foo 1 bar 2") echo ok; esac
ok
在这些情况下,它似乎被评估为一个字符串。- 这是有道理的,但有点令人惊讶。- 我希望它等于"foo 1" "bar 2"
并因此导致语法错误。
是否有规则在哪种情况下以哪种方式评估?(我在 bash 手册页中找不到正确的部分。)
附加问题:是否存在"${a[@]}"
处理方式不同的情况${a[@]}
?