有人可以解释这两个while循环之间的区别:
while read test; do
echo $test
done <<< "$(seq 5)"
Run Code Online (Sandbox Code Playgroud)
-
while read test; do
echo $test
done < <(seq 5)
Run Code Online (Sandbox Code Playgroud)
while read test; do
echo $test
done <<< "$(seq 5)"
Run Code Online (Sandbox Code Playgroud)
执行seq 5
,将结果收集到临时变量中.然后执行while循环,向其提供收集结果.
while read test; do
echo $test
done < <(seq 5)
Run Code Online (Sandbox Code Playgroud)
设置子shell以执行seq 5
并连接stdout
到它stdin
.然后启动while循环.完成后,恢复stdin
.
有什么不同?因为seq 5
,几乎没有; 但是,通过更改seq 5
为仍然可以使其可见seq 5; echo done generating sequence >&2
.然后你可以看到,在第一种情况下,整个seq
执行在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
Run Code Online (Sandbox Code Playgroud)
如果是的话seq 10000000
,差异会更加明显.该<<<"$(...)
表格会以存储临时字符串中使用了大量的内存.