关于内存,将输出读入数组和将输出读入while循环之间是否存在差异?

时间:2018-04-27 18:42:29

标签: bash

如果command的输出足够小,那么在以下两种结构之间,与内存无关,似乎没有区别。

readarray -t arr < <(command)

for a in "${arr[@]}"; do
  ...
done

while read a; do
  ...
done < <(command)

command的输出非常大时会发生什么?

在第一种情况下,显而易见的是整个输出都填充在数组变量arr中......效率不高或非常大的输出欢迎。

while; do ...; done < <(command)一次是否通过一行? bash缓冲命令输出的一些子集?或者把整个东西都塞进记忆中?

编辑:修复标题。

1 个答案:

答案 0 :(得分:1)

带有进程替换的第二个版本使用匿名管道连接shell和命令。就像任何普通的|管道一样,这意味着命令的输出在处理时只需少量缓冲(在现代Linux内核上为64KB)。这也意味着如果循环读取速度不够,命令将阻塞。