Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 传递给函数后在bash中获取数组长度时出错_Arrays_Bash_Shell - Fatal编程技术网

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

Arrays 传递给函数后在bash中获取数组长度时出错,arrays,bash,shell,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 将val=$@更改为val=(“${}”),您应该会没事的 在

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

#!/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

val=$@
更改为
val=(“${}”)
,您应该会没事的

在unix.stackexchange中解释了原因:

您正在将输入展平为单个值

你应该这样做

list=("${@}") 
要维护数组和中空格的潜力,请执行以下操作: 争论

如果您漏掉了“密码”,那么类似于
/script.sh的“AB”2 3 4
就会出现 返回长度5,因为第一个参数将被拆分


这有助于我识别上面脚本中的gotchas:
$#
已经是
$@
的长度;您不需要先创建数组。可能的重复项等。是否需要区分参数是否实际上是数组?例如
foo 1“a b“foobar
-它是否应该报告一个大小为3的数组,而不涉及任何数组?建议的副本只告诉您OP显然已经知道的事情。正确的副本会说“在任何地方都使用引号,除非你能解释为什么不使用。”这并不能区分输入
foo123
var=(1233);foo${var[@]}
以及len和contains也需要修复。@Maroun如果我必须向函数传递两个参数,
list=(“${}”)
将把参数合并为一个,并作为单个数组进行回显。如何通过这种方法分别获取每个参数。