echo" $ {array [@]}"有什么区别? echo" $ {array [*]}"在bash中

时间:2015-03-11 07:34:09

标签: arrays bash

我对echo "${array[@]}"echo "${array[*]}"得到了相同的结果 如果我这样做:
mkdir fakemusic; touch fakemusic/{Beatles,Stone,Ramones,Doors}{001..199}; cd fakemusic
然后_msc=(*)
这两个命令给我相同的输出:

echo "${_msc[@]}"  
echo "${_msc[*]}"  

那么它们之间有什么区别。

1 个答案:

答案 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