这种方法有什么问题我无法获得正确的数组长度值
#!/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
答案 0 :(得分:4)
将val=$@
更改为val=("${@}")
,您应该没问题。
This answer解释了原因:
您将输入展平为单个值。
你应该做
list=("${@}")
维护数组和空格的潜力 参数。
如果你错过了“那么像
./script.sh "a b" 2 3 4
那样的话 返回长度为5,因为第一个参数将被拆分