我正在处理大变量,使用while read line
进行循环“非常缓慢”,我发现变量越小它的工作速度越快。
如何将大变量拆分为较小的变量,然后逐个读取?
例如,我想要实现的目标:
bigVar=$(echo "$bigVar" | split_var)
for var in "${bigVar[@]}"; do
while read line; do
...
done <<< "${var}"
done
或者可能会拆分为bigVar1,bigVar2,bigVar3等等。而不是逐个阅读它们。
答案 0 :(得分:6)
而不是做
bigVar=$(someCommand)
while read line
do
...
done <<< "$bigVar"
使用
while read line
do
...
done < <(someCommand)
这样,你可以完全避免使用大变量的问题,并且someCommand
可以在gigabyte之后输出千兆字节而没有任何问题。
如果你把它放在一个变量中的原因是要在它上面做多个步骤,那就把它重写为一个管道。
答案 1 :(得分:0)
如果BigVar由单词构成,则可以使用xargs
将其拆分为不超过命令行的最大长度的行,通常为32kb或64kb:
someCommand|xargs|while read line
do
...
done
在这种情况下,xargs
使用其默认命令echo
。
我很想知道你想在while循环中做什么,因为它可以用管道进行优化。