我对echo "${array[@]}"
和echo "${array[*]}"
得到了相同的结果
如果我这样做:
mkdir fakemusic; touch fakemusic/{Beatles,Stone,Ramones,Doors}{001..199}; cd fakemusic
。
然后_msc=(*)
这两个命令给我相同的输出:
echo "${_msc[@]}"
echo "${_msc[*]}"
那么它们之间有什么区别。
答案 0 :(得分:3)
shell将"${_msc[@]}"
扩展为单独的字符串,同时将"${_msc[*]}"
扩展为单个字符串,默认情况下项目由空格分隔。您无法看到与echo
的区别,因为它还使用空格作为分隔符。以下是printf
:
$ printf "%s;%s;%s\n" "${_msc[@]}"
a;b;c
$ printf "%s;%s;%s\n" "${_msc[*]}"
a b c;;
shell变量IFS
控制哪个字符用作分隔符。如果您更改它,您也可以看到与echo
的区别:
$ IFS='|'
$ echo "${_msc[*]}" # shell expands to a single string
a|b|c
$ echo "${_msc[@]}" # shell expands to a separate string
a b c