誰かがこれらの 2 つの while ループの違いを説明できますか:
while read test; do
echo $test
done <<< "$(seq 5)"
-
while read test; do
echo $test
done < <(seq 5)
誰かがこれらの 2 つの while ループの違いを説明できますか:
while read test; do
echo $test
done <<< "$(seq 5)"
-
while read test; do
echo $test
done < <(seq 5)
while read test; do
echo $test
done <<< "$(seq 5)"
を実行seq 5
し、結果を一時変数に収集します。次に while ループを実行し、収集結果をフィードします。
while read test; do
echo $test
done < <(seq 5)
実行するサブシェルを設定し、seq 5
に接続stdout
しstdin
ます。次に、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
、違いはもっとはっきりするでしょう。一時的な文字列を格納するために、<<<"$(...)
フォームはより多くのメモリを使用します。