关于在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
语句中获得分配给变量的行为?
答案 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