2013-02-22 52 views
1

只是关于在bash中进行后增量的正确方法的一个小问题。Bash Post Increment

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语句中的行为分配给一个变量?

编辑:在我的第一个例子中,而不是回显CONT,我应该回显VAR,这样它的工作正常,所以这是我从一开始的错误。

回答

5

案件是可以和合理的。

foo++将首先返回foo的当前值(自动递增之前),然后自动递增。

在第一种情况下,如果你改变成echo "CONT: $VAR",它会给相同的结果的情况下2.

如果你想有1,2,3...,通过自动递增,你可以尝试:

echo "CONT: $((++CONT))" 
+0

谢谢,我明白了,但我想在赋值给变量而不是回声中做。在回声中它工作正常,但不是当我分配给变量(我不知道从0开始的正确方法)。 – JorgeeFG 2013-02-22 13:55:17

+0

我刚刚注意到它的效果很好,并且是我在第一个示例中的错误,而不是回显VAR,我回应了CONT。这就是为什么它没有工作。 – JorgeeFG 2013-02-22 13:58:14

+0

@Jorge您的第一个案例('$ VAR')从0开始 – Kent 2013-02-22 13:58:36

1

递增意味着,返回先前的值,然后递增该值。

在第一个示例中,在之后使用值将其递增。在你的第二个例子中,你在之前使用来增加它。

如果你想同样的结果在第一个例子中,你必须使用前缀增量

while true; do 
    echo "CONT: $((++CONT))" 
    sleep 1 
done 
+0

谢谢,我理解它,但我想在赋值给变量而不是回声中做。在回声中它工作正常,但不是当我分配给变量(我不知道从0开始的正确方法)。 – JorgeeFG 2013-02-22 13:55:41

+0

我只注意到它的效果很好,并且是第一个例子中的错误。 – JorgeeFG 2013-02-22 13:57:28

2

让我们来简化你的代码,使其更容易理解。

以下:

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 

希望这有助于解释你为什么会看到这种行为。

+0

我刚刚注意到它的效果很好,并且是我在第一个示例中的错误,而不是回显VAR,我回应了CONT。这就是为什么它没有工作。 – JorgeeFG 2013-02-22 13:59:34

相关问题