10

誰かがこれらの 2 つの while ループの違いを説明できますか:

while read test; do
echo $test
done <<< "$(seq 5)"

-

while read test; do
echo $test
done < <(seq 5)
4

2 に答える 2

16
while read test; do
  echo $test
done <<< "$(seq 5)"

を実行seq 5し、結果を一時変数に収集します。次に while ループを実行し、収集結果をフィードします。

while read test; do
  echo $test
done < <(seq 5)

実行するサブシェルを設定し、seq 5に接続stdoutstdinます。次に、while ループを開始します。終了したら、元に戻しstdinます。

違いは何ですか?、seq 5実質的に何もありません。seq 5ただし、 に変更することで引き続き表示できますseq 5; echo done generating sequence >&2。次に、最初のケースではループが開始するseq前に実行全体が終了するのに対し、2 番目のケースではそれらが並列に実行されることがわかります。while

$ while read n; do echo $n > /dev/stderr; done \
>       <<<"$(seq 5; echo done generating sequence >&2)"
done generating sequence
1
2
3
4
5
$ while read n; do echo $n > /dev/stderr; done \
>       < <(seq 5; echo done generating sequence >&2)
1
2
done generating sequence
3
4
5

だとすればseq 10000000、違いはもっとはっきりするでしょう。一時的な文字列を格納するために、<<<"$(...)フォームはより多くのメモリを使用します。

于 2013-08-25T00:30:30.487 に答える