bash数组 - $ {#array_name [*]}和$ {#array_name [@]}之间的区别是什么

时间:2010-06-17 09:36:47

标签: arrays bash

bash-3.00$ cat arr.bash  
#!/bin/bash  

declare -a myarray  
myarray[2]="two"  
myarray[5]="five"  

echo ${#myarray[*]}  
echo ${#myarray[@]}  

bash-3.00$ ./arr.bash  
2  
2

两者都给出了数组的元素数量。那两者有什么区别?

3 个答案:

答案 0 :(得分:6)

在这种情况下,没有区别。当您展开数组并且扩展被引号括起来时,两个“所有元素”下标会有所不同。

"${array[*]}扩展为"two five"

"${array[@]}扩展为"two" "five"(即两个字词)。

答案 1 :(得分:2)

没有区别。它们都给出了数组中元素的数量。当您在双引号中使用数组扩展"${array[*]}"并将IFS设置为默认值以外的某个值时,会出现差异。

$ array=(1 2 3)
$ echo "${array[*]}"
1 2 3
$ saveIFS=$IFS
$ IFS=","
$ echo "${array[*]}"
1,2,3
$ IFS=$saveIFS

答案 2 :(得分:0)

没有区别。来自bash联机帮助页:

  

$ {#name [subscript]}扩展为   $ {name [sub-script]}的长度。如果   下标是*或@,扩展是   数组中元素的数量。