IFS の取り扱い
デフォルト(スペース・タブ・改行)
IFS=$' \t\n'
IFS を改行のみに設定する
IFS=$'\n'
参考:
スペースが含まれる文字列を1行として扱う方法 -逆引きシェルスクリプト | Linuxと過ごす
bash の IFS に改行のみを設定するには – 計算機と戯れる日々
シェルでループ時のデリミタを切り替えたい | それなりブログ
Bash internal field separator (IFS) usage – GitHub Gist
現在の IFS を確認する
$ printf "%q\n" "$IFS" $' \t\n'
IFS をリセットする
- Bash の
IFS
のデフォルトはスペース・タブ・改行(IFS=$' \t\n'
) unset IFS
を実行した場合、IFS
は null になるが、その場合のデフォルトの挙動はスペース・タブ・改行区切りとなるIFS=""
(空文字) に設定すると、区切りが一切行われない
参考:
unset IFS – unexpected behaviour – Stack Overflow
Understanding IFS – Unix & Linux Stack Exchange
IFS null is not the same as unset IFS? – Unix & Linux Stack Exchange
Resetting Internal Variables to Default (BASH, IFS in particular) | LinuxQuestions.org
for と read の違い
参考:
ファイルを行ごとに読み込んで、各行ごとにスペース区切り配列に入れるスクリプト – cameong’s blog
How to read complete line in ‘for’ loop with spaces – Ask Ubuntu