誰かがこれらの 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、違いはもっとはっきりするでしょう。一時的な文字列を格納するために、<<<"$(...)フォームはより多くのメモリを使用します。