同様の構造は、BashがIFS= read -r var
変数への入力行を読み取る「標準」方式と見なされることがよくあります(例:unix.SEで)。
$IFS
nullを設定することがしばしば有益な理由、つまり単語の分離を制御(防止)する理由は明らかです。しかし、読んでいるとき、これが特に必要な理由を理解するのが困難です。一つ変える? Bashのマニュアルは次のように言います:
名前よりも多くの単語がある場合、残りの単語と中間区切り文字は姓に割り当てられます。
したがって、IFSを変更しなくてもread
単一の変数を渡す場合は、必要に応じて行全体をその変数に保存する必要はありませんか?$IFS
この場合、nullを設定するのはなぜですか?
答え1
次の例を検討してください($IFS
デフォルトを有効にするには設定しません)。
$ unset IFS
$ IFS= read -r foo <<<" a "
$ printf "%q\n" "$foo"
\ a\
$ read -r foo <<<" a "
$ printf "%q\n" "$foo"
a
または他の値が含まれている場合(bashまたはzshを除く他のPOSIX様シェルから):
$ IFS=:
$ IFS= read -r foo <<< "a:"
$ printf "%q\n" "$foo"
a:
$ read -r foo <<< "a:"
$ printf '%q\n' "$foo"
a
このイベントは次のとおりです。質問に記載されている投稿(強調する):
1つのパラメータだけを渡しても
read line
Stillにはなりませんread remaining_words
。バックスラッシュ処理はまだ完了しています。IFS空白文字²はまだ開始と終了から削除されます。。