2

只是关于在 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 (undefined,¿0?) 并添加 +1。

如何获得类似 inecho语句的行为以分配给变量?

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

4

4 回答 4

8

两种情况都可以且合理。

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

在您的第一种情况下,如果您更改为echo "CONT: $VAR",它将给出与情况 2 相同的结果。

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

echo "CONT: $((++CONT))"
于 2013-02-22T13:51:08.883 回答
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

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

于 2013-02-22T13:56:49.657 回答
1

后增量意味着,返回前一个值,然后增加该值。

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

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

while true; do
    echo "CONT: $((++CONT))"
    sleep 1
done
于 2013-02-22T13:52:15.650 回答
0

((CONT++))是增加变量的原因。添加"$"is 用于其他目的。

于 2022-02-10T11:05:25.337 回答