2012-04-03 14 views
0

私は最初の項目の後にこのループが停止するのを忘れています。誰かが私をある方向に向けることができますか?ありがとう!シェル配列のループが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"に変更してください。ありがとうFJ。 –

答えて

2

以下にそれを変更してみてください:

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

は引用符を削除する(たとえば"sky blue"用)単色にスペースがあった場合はあなたの例では動作しますが、しません。

+0

[@]と[*]の違いは何ですか? –

+0

@RedLabor引用符を付けないと違いはありません。 '[*]'は引用符で囲まれた配列全体を別々の行に表示します。引用符付きの[@]は各行に別々の行を表示します。 –

+1

@ RedLaborの場合、これは 'colors [7] =" light blue "' - $ {colors [@]} ''のような色にスペースがあれば特に重要です。反復する。 –

2

これを行う多くの方法の1つは、forループを使用することです。ここでの追加情報は、配列のサイズを取得する方法です。

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