当我检查数组的长度总是1时,即使我在命令行中提供更多参数
for i in $*
do
echo $i
conect[$i]=0
done
echo ${#conect}
答案 0 :(得分:3)
试试这个:
#!/bin/bash
declare -A conect
for i in "$@"
do
echo $i
conect[$i]=0
done
echo ${#conect[@]}
说明:
declare -A
声明。如果保证索引是数字,则不需要此。${#foo}
是字符串值变量的长度(字符数); ${#conect[@]}
是数组的长度(元素数)。"$@"
优于$*
,尤其是当(引用)参数可能包含空格时。 答案 1 :(得分:0)
$ *创建一个用IFS分隔的单个参数。这就是原因。使用$ @
What is the difference between "$@" and "$*" in Bash?
修改强> 实际上,正如@that_other_guy和@Ruud_Helderman指出的那样(感谢你们两位),我所说的并不是对的。
首先是Mea Culpa,因为这不是完整的解决方案。
但它让我感到奇怪,所以这里是正确的方法。 IFS差异是一个事实。但是,如果你引用" $ *"或" $ @"
for i in "$*"
do
echo $i
done
将在同一行输出每个参数,而
for i in "$@"
do
echo $i
done
一次只做一个。
答案 2 :(得分:0)
您应该使用数组:
for i in "$@"