GNU/Linux >> Linux の 問題 >  >> Linux

`ifs=の代わりに`whileIfs=Read`が頻繁に使用されるのはなぜですか。読みながら..`?

通常の慣行では、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番目の部分はここに統合されているため、関連する回答をここから削除しました。


Linux
  1. 使用中のファイルの切り捨て (Linux)

  2. 一部のカーネル プログラマーが単純な while ループの代わりに goto を使用するのはなぜですか?

  3. Linux で select が使用される理由

  1. `while Ifs =Read ..`で、なぜIfsは効果がないのですか?

  2. ドライブ/パーティション番号がまだ使用されているのはなぜですか?

  3. LINUX に 3 種類の X セレクションがあるのはなぜですか?

  1. なぜ`ls`(および代わりに何をすべきか)を解析しないのですか?

  2. ファイルをペンドライブにコピーしているときにPCがフリーズするのはなぜですか?

  3. hexdump が EOF を読み込もうとするのはなぜですか?