如何拆分大变量?

Orl*_*rlo 2 linux variables bash loops large-data

我正在使用大变量,它可以非常缓慢地"循环"通过它们while read line,我发现变量越小它工作得越快.

如何将大变量拆分为较小的变量然后逐个读取?

例如,我想要实现的目标:

bigVar=$(echo "$bigVar" | split_var)

for var in "${bigVar[@]}"; do
  while read line; do
    ...
  done <<< "${var}"
done
Run Code Online (Sandbox Code Playgroud)

或者可能会拆分为bigVar1,bigVar2,bigVar3等.而不是逐个读取它们.

tha*_*guy 6

而不是做

bigVar=$(someCommand)
while read line
do
   ...
done <<< "$bigVar"
Run Code Online (Sandbox Code Playgroud)

使用

while read line
do
   ...
done <   <(someCommand)
Run Code Online (Sandbox Code Playgroud)

这样,你someCommand可以完全避免使用大变量的问题,并且可以在gigabyte之后输出千兆字节而没有任何问题.

如果将它放在变量中的原因是在其上执行多个步骤,请将其重写为管道.

  • 第一种方法将从进程中读取并重复重新分配变量以将其全部保存在内存中,这会使变量获得的时间越来越长.然后它复制字符串扩展的数据,并且必须将其提供给while读取命令.只有这样,while读取才能开始读取.使用第二种方法,命令输出直接馈送到循环,使其更快启动并减少总工作量. (4认同)
  • 只是好奇,为什么第一种方法与第二种方法相比如此之慢? (2认同)