2012-04-03 67 views
0

我不知道爲什麼此循環在第一項之後停止。有人能指出我的方向嗎?謝謝!shell數組循環在1之後停止

#! /bin/sh 

colors[0]="teal" 
colors[1]="purple" 
colors[2]="pink" 
colors[3]="red" 
colors[4]="green" 
colors[5]="darkblue" 
colors[6]="skyblue" 

for color in ${colors} 
do 
    echo $color 
done 
+0

/bin/sh不支持數組。如果你打算在bash下運行你的腳本,請將你的腳本改爲「#!/ bin/bash」。 – 2012-04-03 22:09:17

回答

2

嘗試將其更改爲以下:

for color in "${colors[@]}" 
do 
    echo $color 
done 

刪除引號會爲你的工作,例如,但如果有一個單一的顏色(例如"sky blue")的任何空間。

+0

謝謝FJ。我很好奇使用[@]和[*]有什麼區別? – 2012-04-03 22:36:32

+0

@RedLabor沒有引號就沒有區別,'[*]'用引號將整個數組放在一個單獨的行上,'[@]'用引號將仍然給你每一行的顏色。 – 2012-04-03 23:43:46

+1

@RedLabor,如果任何一種顏色有空格,比如'colors [7] =「淺藍色」 - 然後'「$ {colors [@]}」'是正確的唯一方法迭代。 – 2012-04-04 13:14:17

2

其中一種方法是使用for循環。這裏的附加信息是如何獲得數組的大小。

#Get the size of the array 
nColors=${#colors[*]} 
for ((Idx = 0; Idx < $nColors; ++Idx )); do 
    echo "${colors[$Idx]}" 
done