通常の慣行では、IFSの設定をwhileループの外に置いて、反復ごとに設定を繰り返さないようにします。これは、私が読むまでこの猿の場合と同じように、単なる習慣的な「猿が見る、猿がする」スタイルですか。 男が読んだ 、またはここに微妙な(または露骨に明白な)トラップがありませんか?
承認された回答:
罠はそれです
IFS=; while read..
IFS
を設定します ループ外のシェル環境全体に対して
while IFS= read
read
に対してのみ再定義します 呼び出し (Bourneシェルを除く)。
次のようなループを実行していることを確認できます
while IFS= read xxx; ... done
次に、そのようなループの後、echo "blabalbla $IFS ooooooo"
プリント
blabalbla ooooooo
一方、後
IFS=; read xxx; ... done
IFS
滞在 再定義:echo "blabalbla $IFS ooooooo"
プリント
blabalbla ooooooo
したがって、2番目の形式を使用する場合は、リセットすることを忘れないでください:IFS=$' tn'
。
この質問の2番目の部分はここに統合されているため、関連する回答をここから削除しました。