bashの地味な罠「IFS」で落とし穴にはまった

はい、未だにbashを触ってるわけなんですが、他の人が作ったり修正したもので
後から予想外の挙動になったりしたりします。

結論から書くと、今回はIFSでセパレータを指定していたため、スペースで分けてる部分がおかしい挙動になっていました。

●元プログラム
DATA="1 2 3"
for dat in $DATA ; do
echo "$dat"
done

1
2
3


これ、datがfor文で1,2,3と回るわけなんですが、
他の部分でIFSを指定した人がいて、想定した挙動になっていませんでした。

●変更後
IFS=,
DATA="1 2 3"
for dat in $DATA ; do
echo "$dat"
done

1 2 3

for文は「1 2 3」という1つの文字列として扱ってしまいます。
IFSがこのプログラム上のセパレータをカンマだけに指定してしまっているためです。

通常、bashだとスペース、タブ、改行などがセパレータとして許容されているのですが、
IFS=,とした場合、カンマだけになるようです。

参考:
https://www.server-memo.net/shellscript/ifs.html