Bash Post增量

时间:2013-02-22 13:40:32

标签: bash post-increment

关于在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,这样就可以了,所以从一开始就是我的错误。

3 个答案:

答案 0 :(得分:5)

两个案例都合适。

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

在第一种情况下,如果您更改为echo "CONT: $VAR",则会得出与案例2相同的结果。

如果你想拥有1,2,3...,可以尝试自动增加:

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

答案 1 :(得分: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

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

答案 2 :(得分:1)

后增量表示,返回上一个值,然后递增值。

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

如果您想要与第一个示例中相同的结果,则必须使用前缀增量

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