我不知道爲什麼此循環在第一項之後停止。有人能指出我的方向嗎?謝謝!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
我不知道爲什麼此循環在第一項之後停止。有人能指出我的方向嗎?謝謝!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
嘗試將其更改爲以下:
for color in "${colors[@]}"
do
echo $color
done
刪除引號會爲你的工作,例如,但如果有一個單一的顏色(例如"sky blue"
)的任何空間。
謝謝FJ。我很好奇使用[@]和[*]有什麼區別? – 2012-04-03 22:36:32
@RedLabor沒有引號就沒有區別,'[*]'用引號將整個數組放在一個單獨的行上,'[@]'用引號將仍然給你每一行的顏色。 – 2012-04-03 23:43:46
@RedLabor,如果任何一種顏色有空格,比如'colors [7] =「淺藍色」 - 然後'「$ {colors [@]}」'是正確的唯一方法迭代。 – 2012-04-04 13:14:17
其中一種方法是使用for
循環。這裏的附加信息是如何獲得數組的大小。
#Get the size of the array
nColors=${#colors[*]}
for ((Idx = 0; Idx < $nColors; ++Idx )); do
echo "${colors[$Idx]}"
done
/bin/sh不支持數組。如果你打算在bash下運行你的腳本,請將你的腳本改爲「#!/ bin/bash」。 – 2012-04-03 22:09:17