for in 等を使う時に
改行だけで分割してくれ! とか思う時ってあるよね。
デフォルトで、区切り文字はIFS という変数に持っているので、こいつを一時的に変更してあげれば区切り文字をすきなようにできる。
1 #!/bin/sh 2 3 LIST="test1\ttest2 test3 4 test4" 5 6 echo 'デフォルトのIFS' 7 for l in ${LIST}; do 8 echo "[${l}]" 9 done 10 11 12 # シェル内の区切り文字を変更する 13 IFS=' 14 ' 15 16 echo '改行だけにしたIFS' 17 for l in ${LIST}; do 18 echo "[${l}]" 19 done 20
こんな感じで、IFS変数を改行のみにして実験してみる。
sugamasao% ./test.sh
デフォルトのIFS
[test1 test2]
[test3]
[test4]
改行だけにしたIFS
[test1 test2 test3]
[test4]
おぉ、改行だけで分割されるようになったぞ。
ちなみに、シェルスクリプト内なので IFS 変数の中身を直接いじったけど、普通のターミナルで IFS 変数をいじっちゃうと、思わぬ影響がでるかもしれないので、変更前に IFS の値をバックアップ等をしておいた方が良いね。