传递给函数后在bash中获取数组长度时出错

时间:2018-03-26 16:59:44

标签: arrays bash shell

这种方法有什么问题我无法获得正确的数组长度值

#!/bin/bash

foo(){

    val=$@
    len=${#val[@]}
    echo "Array contains: " $val
    echo "Array length is: " $len

}

var=(1 2 3)
foo ${var[@]}

输出:

Array contains: 1 2 3
Array length is: 1

1 个答案:

答案 0 :(得分:4)

val=$@更改为val=("${@}"),您应该没问题。

unix.stackexchange中的

This answer解释了原因:

  

您将输入展平为单个值。

     

你应该做

list=("${@}") 
     

维护数组和空格的潜力   参数。

     

如果你错过了“那么像./script.sh "a b" 2 3 4那样的话   返回长度为5,因为第一个参数将被拆分