2017-04-24 104 views

回答

3

試試這個:

#!/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]"$*更好,特別是當(引用的)參數可能包含空格時。
+0

它的工作!非常感謝! – clausdia

0

$ *創建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 

會做一次一個。

+0

'f(){for i in $ *;確實迴應「循環」;完成; }; f 1 2 3'表明這是虛假的 –

+0

@KuuAku很好的建議,但不是OP問題的原因;注意''* *'周圍沒有引號。看到這個答案中的例子:http://stackoverflow.com/questions/2761723/what-is-the-difference-between-and-in-shell-scripts#2761739 –

0

您應該使用數組:

for i in "[email protected]" 
+1

優秀的建議,但不是OP的問題的原因;注意''* *'周圍沒有引號。請參閱此答案中的示例:http://stackoverflow.com/questions/2761723/what-is-the-difference-between-and-in-shell-scripts#2761739 –

+1

好點。謝謝@RuudHelderman –