bash数组使用@ vs *,两者之间的区别

Dim*_*elu 3 linux bash

我无法查明使用$ {array [@]}与$ {array [*]}之间的确切区别

我在打印时看到的是差异,但我想还有更多差异

declare -a array
array=("1" "2" "3")
IFS=","
printf "%s" ${array[@]}
printf "%s" ${array[*]}
IFS=" "
Run Code Online (Sandbox Code Playgroud)

我在TLDP上进行了搜索,但找不到。它是普通的bash还是仅用于数组?非常感谢!

oli*_*liv 8

如中所述man bash

如果单词用双引号引起来,则$ {name [*]}扩展为一个单词,每个数组成员的值均由IFS特殊变量的第一个字符分隔,而$ {name [@]}扩展其中的每个元素命名为一个单独的单词。

例子:

array=("1" "2" "3")
printf "'%s'" "${array[*]}"
'1 2 3'
printf "'%s'" "${array[@]}"
'1''2''3'
Run Code Online (Sandbox Code Playgroud)

  • @Jon 是的,如手册页中所述(帖子中提到的前一句):_仅当单词出现在双引号内时,这些下标才会有所不同。_ (2认同)