在这个shell脚本中更新全局变量时遇到麻烦。我读到循环内的变量在子壳上运行。谁能解释一下这是如何工作的,我应该采取什么步骤。
USER_NonRecursiveSum=0.0
while [ $lineCount -le $(($USER_Num)) ]
do
thisTime="$STimeDuration.$NTimeDuration"
USER_NonRecursiveSum=`echo "$USER_NonRecursiveSum + $thisTime" | bc`
done
那个特殊的样式的循环不会在子shell中运行,它会很好地更新变量。您可以在下面的代码中看到,除了添加了问题中没有包含的内容之外,它与您的代码相当:
USER_NonRecursiveSum=0
((USER_Num = 4)) # Add this to set loop limit.
((lineCount = 1)) # Add this to set loop control variable initial value.
while [ $lineCount -le $(($USER_Num)) ]
do
thisTime="1.2" # Modify this to provide specific thing to add.
USER_NonRecursiveSum=`echo "$USER_NonRecursiveSum + $thisTime" | bc`
(( lineCount += 1)) # Add this to limit loop.
done
echo ${USER_NonRecursiveSum} # Add this so we can see the final value.
该循环运行了四次,每次都将1.2
添加到从0开始的值上,并且您可以看到循环结束后它最终为4.8
。
虽然echo
命令确实在子shell中运行,但这不是问题,因为反引号显式捕获的输出并"交付";