Linux 消除子外壳以加快处理速度?
我已经读到,调用子shell的脚本速度很慢,这可以解释为什么我的脚本速度很慢 例如,在这里,我运行一个循环,从数组中获取一个数字,这个循环是否每次都运行子shell,不使用子shell可以解决这个问题Linux 消除子外壳以加快处理速度?,linux,bash,shell,subshell,Linux,Bash,Shell,Subshell,我已经读到,调用子shell的脚本速度很慢,这可以解释为什么我的脚本速度很慢 例如,在这里,我运行一个循环,从数组中获取一个数字,这个循环是否每次都运行子shell,不使用子shell可以解决这个问题 mmode=1 modes[1,2]="9,12,18,19,20,30,43,44,45,46,47,48,49" until [[ -z $kik ]];do ((++mloop)) kik=$(echo ${modes[$mmode,2]} | cut
mmode=1
modes[1,2]="9,12,18,19,20,30,43,44,45,46,47,48,49"
until [[ -z $kik ]];do
((++mloop))
kik=$(echo ${modes[$mmode,2]} | cut -d "," -f $mloop)
filename=$(basename "$f")
# is all these lines
xcolorall=$((xcolorall+$storednr)
# also triggering
pros2=$(echo "100/$totpix*$xcolorall" | bc -l)
IFS='.' read -r pros5 pros6 <<< "$pros2"
procenthittotal2=$pros5.${pros6:0:2}
#subshells and if,
# is it possible to circumvent it?
#and more of the same code..
done
mmode=1
模式[1,2]=“9,12,18,19,20,30,43,44,45,46,47,48,49”
直至[[-z$kik]];做
(++mloop))
kik=$(echo${modes[$mmode,2]}| cut-d“,”-f$mloop)
文件名=$(基本名称“$f”)
#这些都是线吗
xcolorall=$((xcolorall+$storednr)
#也触发
pros2=$(echo“100/$totpix*$xcolorall”| bc-l)
如果s='.'read-r pros5 pros6可以用bash内置命令替换问题中显示的所有子shell和extern命令
kik=$(echo${modes[$mmode,2]}| cut-d“,“-f$mloop)
可替换为
mapfile-d,-t-s$((mloop-1))-n1 kik,这取决于您的shell。看起来这是bash,它将派生任何$(…),而ksh93不会。参见示例,基本要点是,最好使用bash
调用具有适当输入的其他工具。如果您更好地描述您的输入,也许有人可以想出一种不需要这种bash循环解决方案的方法。我支持liborm:我认为子shell不是问题,b但是循环是很慢的。bash中的循环很慢,有或没有子shell。通常有一些方法可以在没有循环的情况下处理。注意:$(())
不会生成子shell;它是一个直接在主shell中解析的算术表达式。另一方面,var=$(echo something | somecommand)
创建三个子流程:一个用于管理管道的子shell,另一个用于执行echo
,另一个用于运行somecommand
var=$(somecommand可能会退后一步,解释您实际要做的事情。您是在计算图像中某一颜色的像素吗?您可能完全使用了错误的工具。我刚刚测试了您的解决方案,第一个解决方案以40xloop的速度将运行时间从8.9秒降低到了3.5秒,我对子shell的速度如此之慢感到惊讶。然而,精确性离子2溶液不起作用…谢谢你让我知道。你能详细说明一下“不起作用”吗使用totpix=1200;xcolorall=750
我得到的62.50
比我从bc
得到的62.499999999750
更精确。是否xcolorall
也是一个浮点数?如果是,那么你也必须在这里应用同样的技巧。当我使用set-e运行时((pros=10**precision*100*xcolorall/totpix))'命令退出时出现错误1,即使我在代码中将pros改为pros2,我也不会从中得到任何结果。xcolorall是像素数,不是浮动的。我用我的完整函数更新了这个问题以计算百分比。感谢您现在让我这么做。我很高兴能提供帮助。