只是关于在bash中做后增量的正确方法的一个小问题。
while true; do
VAR=$((CONT++))
echo "CONT: $CONT"
sleep 1
done在本例中,VAR从1开始。
CONT: 1
CONT: 2
CONT: 3但如果我这样做:
while true; do
echo "CONT: $((CONT++))"
sleep 1
done它从0开始。
CONT: 0
CONT: 1
CONT: 2似乎第一种情况表现良好,因为((CONT++))将计算CONT (未定义,?0?)然后加+1。
如何将echo语句中的行为赋值给变量?
编辑:在我的第一个示例中,我应该回显VAR,而不是回显CONT,这样它就可以正常工作,所以从一开始就是我的错误。
发布于 2013-02-22 21:51:09
两种情况下的都是正常和合理的。
foo++将首先返回foo的当前值(自动递增前),然后返回自动递增。
在第一种情况下,如果您更改为echo "CONT: $VAR",它将产生与第二种情况相同的结果。
如果你想使用自动递增的1,2,3...,你可以试试:
echo "CONT: $((++CONT))"发布于 2013-02-22 21:56:50
让我们简化您的代码,使其更容易理解。
以下内容:
VAR=$((CONT++))
echo "CONT: $CONT"可以分为以下几个步骤:
VAR=$CONT # assign CONT to VAR
CONT=$((CONT+1)) # increment CONT
echo "CONT: $CONT" # print CONT类似的,下面的语句:
echo "CONT: $((CONT++))"等同于:
echo "CONT: $CONT" # print CONT
CONT=$((CONT+1)) # then increment CONT希望这有助于解释为什么你会看到这种行为。
发布于 2013-02-22 21:52:16
后递增意味着,返回前一个值,然后递增该值。
在您的第一个示例中,您将使用递增后的值。在您的第二个示例中,在递增它之前使用它。
如果希望得到与第一个示例相同的结果,则必须使用前缀增量
while true; do
echo "CONT: $((++CONT))"
sleep 1
donehttps://stackoverflow.com/questions/15025564
复制相似问题