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
两者都给出了数组的元素数量。那两者有什么区别?
答案 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]}的长度。如果 下标是*或@,扩展是 数组中元素的数量。