gpt4 book ai didi

bash - While 循环 - 进程替换与带命令替换的此处字符串

转载 作者:行者123 更新时间:2023-11-29 08:59:22 26 4
gpt4 key购买 nike

谁能解释一下这两个 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)

设置一个子shell来执行seq 5并连接它的 stdoutstdin .然后开始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

如果是 seq 10000000 ,区别会更明显。 <<<"$(...)表单将使用更多内存来存储临时字符串。

关于bash - While 循环 - 进程替换与带命令替换的此处字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18423077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com