while read
UNIX OSを使っていると、ときどき
$ cat > test1.txt AAAAAA BB CCC D
ファイルの中身を1行ずつ何かのコマンドに渡したくて、
$ for i in `cat test1.txt` ; do (echo "==$i") ; done ==AAAAAA ==BB ==CCC ==D
catの出力によるforループを書いたりすることが、ありますよね?
しかしながら、
$ cat test.txt -e A HOGE -e B -g XX 1 2 3 4 -g YYY -e C
スペース区切りレイアウトのファイルに対して、同じように、catを使っちゃうと、
$ for i in `cat test.txt` ; do (echo "==$i") ; done ==-e ==A ==HOGE ==-e ==B ==-g ==XX ==1 ==2 ==3 ==4 ==-g ==YYY ==-e ==C
スペースごとにバラされて、1個ずつコマンドに渡ってしまいます。
こういうときは、while readを使います。
$ while read i; do (echo "==$i") ; done < test.txt ==-e A HOGE ==-e B ==-g XX 1 2 3 4 ==-g YYY ==-e C
めでたしめでたし。