从 while 循环更新全局变量

Update global variable from while loop

在此 shell 脚本中更新我的全局变量时遇到问题。 我读过子 shell 上循环 运行 内的变量。谁能解释一下这是如何工作的以及我应该采取什么步骤。

USER_NonRecursiveSum=0.0

while [ $lineCount -le $(($USER_Num)) ] 
do
    thisTime="$STimeDuration.$NTimeDuration"
    USER_NonRecursiveSum=`echo "$USER_NonRecursiveSum + $thisTime" | bc`
done

特定 循环样式不会 运行 在 sub-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 添加到从零开始的值,循环完成后您可以看到它以 4.8 结束。

虽然 echo 命令 在 sub-shell 中执行 运行,但这不是问题,因为反引号明确 捕获它的输出并将其“传递”到当前shell.