【问题标题】:bash arrays - what is difference between ${#array_name[*]} and ${#array_name[@]}bash 数组 - ${#array_name[*]} 和 ${#array_name[@]} 有什么区别
【发布时间】:2011-03-04 21:04:48
【问题描述】:
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

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

【问题讨论】:

    标签: arrays bash


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2021-03-18
          • 2015-07-23
          • 1970-01-01
          • 2020-08-13
          • 2020-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-26
          相关资源
          最近更新 更多