まずは基本から。
#!/bin/bash for i in a b c ; do echo ">> $i" done
上記では変数 i
に対して in
の右側にある値を一つづつ代入しループ処理をしています。結果は次のようになります。
❯ ./bin/for-loop.sh >> a >> b >> c
ループさせたい値を配列として指定することもできます。例えば、同じ出力にするには次のように書きます。
#!/bin/bash array=(a b c) for i in ${array[@]} ; do echo ">> $i" done
配列は ${array[@]}
と書かなくてはいけません。 array
だけだと、先頭要素のみを表現することになるからです。そうすると、次のように出力されてしまいます。
❯ ./bin/for-loop.sh >> a
forループでファイルを処理することもできます。例えば次のようなファイルがあったとします。
This is first line. This is second line.
次のようにすれば、ファイルをループ処理できます。
#!/bin/bash for i in $(cat $HOME/bin/sample) ; do echo ">> $i" done
結果は次のようになり、改行、またはスペース単位で処理されていることがわかります。
❯ ./bin/for-loop.sh >> This >> is >> first >> line. >> This >> is >> second >> line.
しかし、一行ずつ処理したい方がよくあるケースかもしれません。その場合はIFSを改行に設定します。
#!/bin/bash IFS=$'\n' for i in $(cat $HOME/bin/sample) ; do echo ">> $i" done
IFSに改行を指定するには上記のように $
とシングルクォートで囲う必要がある点に注意してください。実行すると次のようになります。
❯ ./bin/for-loop.sh >> This is first line. >> This is second line.