我正在使用大变量,并且使用while read line
可以非常慢地"循环",我发现越小的变量越快。
如何将大变量拆分为较小的变量,然后一一读取它们?
例如,我想实现的目标:
bigVar=$(echo "$bigVar" | split_var)
for var in "${bigVar[@]}"; do
while read line; do
...
done <<< "${var}"
done
或可以分为bigvar1,bigvar2,bigvar3等。
而不是做
bigVar=$(someCommand)
while read line
do
...
done <<< "$bigVar"
使用
while read line
do
...
done < <(someCommand)
这样,您可以完全避免使用大变量的问题,而someCommand
可以在Gogabyte之后输出Gigabyte,毫无问题。
如果您将其放入变量的原因是在多个步骤上进行工作,请将其重写为管道。
如果bigvar是用单词制成的,则可以使用 xargs
将其划分为不超过命令行的最大长度,通常是32kb或64kb:
someCommand|xargs|while read line
do
...
done
在这种情况下, xargs
使用其默认命令,即 echo
。
我很好奇您在循环中要做什么,因为它可以通过管道进行优化。