hatora's blog

日常の出来事や仕事のことなど/Java/開発/Web/IT

IFSで区切り文字を変更

ヒアドキュメント内でコマンドを羅列して実行したい。

CMD=`cat <<EOF
ls
ls -a
ls -l
EOF`



これを例えばforループ内で取り出して確認してみると

for cmd in ${CMD}
do
 echo ${cmd}
done

 
実行結果
ls
ls
-a
ls
-l



bashの区切り文字は、デフォルトで「タブ•スペース•改行」なので、これを「改行」のみにしてあげる。

IFS=$'\n'
for cmd in ${CMD}
do
 echo ${cmd}
done

実行結果
ls
ls -a
ls -l


ただ、このままだと実行時に引数が認識されないため、元に戻す。

IFS=$'\n'
for cmd in ${CMD}
do
 IFS=$' \t\n'
 ${cmd}
done

なんかいい方法ありそうだけど。。。