説明が欲しい楽しい小さな bash ティーザー。
私が持っている2つのループ構造は同一ですが、明らかにそうではありません。while
ループを実行するときのパイプとリダイレクトにはいくつかの違いがあるようです。
入力ファイル
このサンプル ファイルvalues.txt
が次の内容で呼び出されるとします。
1
2
3
4
5
6
while への配管
$ value=0; cat values.txt | while read var; do value=`expr $value + $var`; done
$ echo $value
0
while へのリダイレクト
$ value=0; while read var; do value=`expr $value + $var`; done < values.txt
$ echo $value
21
簡単に言うと、明らかに最初のバージョンでは、while
ループの各反復は として効果的に実行さ()
れ、2 番目のバージョンでは、各反復は次のように反復されます。{}
()
問題はとの違いではありません{}
。私の質問は、ループの動作にこの違いが生じる原因は何ですか?while
それらが異なる動作をするべき論理的な理由はありますか、それとも互換性の理由で変更できなかったのは、早い段階で行われた悪い選択でしたか? パイプして動作while
を取得することは可能{}
ですか?