如果command
的输出足够小,那么在以下两种结构之间,与内存无关,似乎没有区别。
readarray -t arr < <(command)
for a in "${arr[@]}"; do
...
done
和
while read a; do
...
done < <(command)
当command
的输出非常大时会发生什么?
在第一种情况下,显而易见的是整个输出都填充在数组变量arr
中......效率不高或非常大的输出欢迎。
while; do ...; done < <(command)
一次是否通过一行? bash缓冲命令输出的一些子集?或者把整个东西都塞进记忆中?
编辑:修复标题。
答案 0 :(得分:1)
带有进程替换的第二个版本使用匿名管道连接shell和命令。就像任何普通的|
管道一样,这意味着命令的输出在处理时只需少量缓冲(在现代Linux内核上为64KB)。这也意味着如果循环读取速度不够,命令将阻塞。