回答
试试这个:
#!/bin/bash
declare -A conect
for i in "[email protected]"
do
echo $i
conect[$i]=0
done
echo ${#conect[@]}
说明:
- 的关联阵列(即索引可能非数字)必须声明为
declare -A
。如果索引保证为数字,则不需要此操作。 ${#foo}
是字符串值变量的长度(字符数)${#conect[@]}
是数组的长度(元素数量)。- 正如其他人指出的那样,
"[email protected]"
比$*
更好,特别是当(引用的)参数可能包含空格时。
它的工作!非常感谢! – clausdia
$ *创建IFS分开的一个单独的参数。这就是为什么。使用$ @
What is the difference between "[email protected]" and "$*" in Bash?
编辑 其实,通过@that_other_guy和@Ruud_Helderman(感谢你们)所指出的,我说的是不完全正确。
首先是Mea Culpa,因为这个问题不是完整的解决方案。
但它让我感到奇怪,所以这里是正确的方法。 IFS的差异是一个事实。但是,这只是问题如果你引用“$ *”或“$ @”
for i in "$*"
do
echo $i
done
将输出在同一条线上的每个参数而
for i in "[email protected]"
do
echo $i
done
会做一次一个。
'f(){for i in $ *;确实回应“循环”;完成; }; f 1 2 3'表明这是虚假的 –
@KuuAku很好的建议,但不是OP问题的原因;注意''* *'周围没有引号。看到这个答案中的例子:http://stackoverflow.com/questions/2761723/what-is-the-difference-between-and-in-shell-scripts#2761739 –
您应该使用数组:
for i in "[email protected]"
优秀的建议,但不是OP的问题的原因;注意''* *'周围没有引号。请参阅此答案中的示例:http://stackoverflow.com/questions/2761723/what-is-the-difference-between-and-in-shell-scripts#2761739 –
好点。谢谢@RuudHelderman –
- 1. 初始化的数组构造函数做了什么?
- 2. 这个初始化做了什么? = {}
- 3. 我在加载这个js数组时做了什么错误?
- 4. 编译时初始化数组错误
- 5. 我做了什么错误?
- 6. 我在做下面的数组操作时做错了什么?
- 7. 我做错了什么? (C++数组)
- 8. PHP初学者 - 我做错了什么?
- 9. 我收到“无效的初始化程序”,我做错了什么?
- 10. 初始化多维数组:{0}与{{{0}}}
- 11. 我在什么时区初始化QDateTime?
- 12. VBO - 我可以在初始化时做些什么?
- 13. 错误在初始化数组变量
- 14. 这里正在做什么样的数组初始化(Basic Java)?
- 15. 初始化数组时初始化System.AccessViolationException
- 16. 使用0初始化的数组
- 17. 我在matplotlib中做了什么错误?
- 18. 我在angularjs上做了什么错误?
- 19. 我在JavaScript中做了什么错误?
- 20. 组成初始化错误
- 21. char数组初始化为'\ 0'会发生什么?
- 22. 我在做什么错了?
- 23. array_map简化数组,我做错了什么?
- 24. 我在做角度设置socket.io时做了什么错误
- 25. 13行错误(***)我做错了什么?
- 26. 错误CS1729,我做错了什么?
- 27. java.lang.StringIndexOutOfBOundsException错误我做错了什么
- 28. PHP错误,我做了什么错?
- 29. 为什么变量初始化为0?
- 30. 我在做什么错用数组?
'for i in“$ @”' –