読者です 読者をやめる 読者になる 読者になる

すがブロ

sugamasaoのhatenablogだよ

for 等の区切り位置を変更する

シェル

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 の値をバックアップ等をしておいた方が良いね。