Linux 如何拆分大变量?
我使用的是大变量,在读取行时,使用Linux 如何拆分大变量?,linux,bash,loops,variables,large-data,Linux,Bash,Loops,Variables,Large Data,我使用的是大变量,在读取行时,使用可以非常缓慢地“循环”它们,我发现变量越小,工作越快 如何将大变量拆分为小变量,然后逐个读取它们 比如说,, 我希望达到的目标是: bigVar=$(echo "$bigVar" | split_var) for var in "${bigVar[@]}"; do while read line; do ... done <<< "${var}" done bigVar=$(echo“$bigVar”| split_var)
可以非常缓慢地“循环”它们,我发现变量越小,工作越快
如何将大变量拆分为小变量,然后逐个读取它们
比如说,,
我希望达到的目标是:
bigVar=$(echo "$bigVar" | split_var)
for var in "${bigVar[@]}"; do
while read line; do
...
done <<< "${var}"
done
bigVar=$(echo“$bigVar”| split_var)
对于“${bigVar[@]}”中的变量;做
读行时;做
...
完成而不是做
bigVar=$(someCommand)
while read line
do
...
done <<< "$bigVar"
bigVar=$(someCommand)
读行时
做
...
完成如果BigVar由单词组成,则可以使用xargs
将其拆分为不超过命令行最大长度的行,通常为32kb或64kb:
someCommand|xargs|while read line
do
...
done
在这种情况下,xargs
使用其默认命令,即echo
我很好奇您想在while循环中做什么,因为它可能会通过管道进行优化。在$bigVar
中有什么样的数据?你能举个具体的例子吗?首先,最好不要在变量中存储大量数据。不要使用split\u var
is或echo
bigvar,只需将IFS
设置为要拆分的变量,子字符串扩展呢s=“somebigvariable”;echo“${s:0:7}/${s:7}”
。。或者可能是((i=0;我只是好奇,为什么第一种方法比第二种方法慢?第一种方法会从进程中读取变量,并重复重新定位变量以将其全部保存在内存中,变量越大,这会花费越来越多的时间。然后,它复制数据以进行字符串扩展,并且必须将其提供给while read命令。只有这样,while read才能开始读取。使用第二种方法,命令输出直接馈送到循环,让它更快地开始,并减少总工作量。感谢您的解释。因此,第一种方法必须在while
循环的每次迭代中复制“$bigVar”
,因为它无法知道是否($bigVar
)自上次迭代以来是否已更改?
someCommand|xargs|while read line
do
...
done