シェル(bash)のforループを使うとスペース区切りの文字列でループしてコマンドを実行することができます。(参考:forループに関する覚え書き)
便利な機能ですがスペースではなく改行\n
でループしたい場合もあるかと思います。そういう場合にはIFS
を使ってdelimiterを変更するテクニックがあるそうです。
使い方
今回は次のようなテキストファイルを使って1行ずつコマンドを実行するサンプルを紹介してみます。
$ cat example.txt
aaa 12 34
bbb 56 78
ccc 90 12
普通にforループした場合
$ for i in `cat example.txt`; do echo $i; done
aaa
12
34
bbb
56
78
ccc
90
12
delimiterを\n
に設定した場合
$ IFS=$'\n'
$ for i in `cat example.txt`; do echo $i; done
aaa 12 34
bbb 56 78
ccc 90 12
こんな感じで1行ずつコマンドを実行できます。