【发布时间】:2018-07-26 03:57:11
【问题描述】:
这种方法有什么问题我无法获得正确的数组长度值
#!/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
【问题讨论】:
-
这有助于我识别上面脚本中的陷阱:askubuntu.com/questions/674333/…
-
$#已经是$@的长度;你不需要先创建一个数组。 -
是否有必要区分参数是否实际上是一个数组?例如
foo 1 "a b" foobar- 它应该报告一个大小为 3 的数组,而不涉及任何数组吗? -
建议的副本只告诉你 OP 显然已经知道的事情。正确的副本会说“在任何地方都使用引号,除非你能解释为什么不这样做。”