为什么 echo $((i++)) 的输出与 echo $((i=i+1)) 的输出不同

为什么 echo $((i++)) 的输出与 echo $((i=i+1)) 的输出不同
!#/bin/bash
i=1
echo $((i++))

i=1
echo $((++i))

i=1
echo $((i=i+1))

这是输出

bash increment
1
2
2

我认为表达式 i=i+1 与 i++ 相同。

有没有办法检查两个表达式是否相等?

答案1

好的,请记住,执行 ++i(前增量)与 i++(后增量)不同。

前增量将在输出到终端之前增加值。后增量将在将其发布到终端后执行此操作。因此,您将看到第一个值与第一种情况下开头分配的值相同。

要检查这一点,只需执行两次:

i=1   
$((i++)) // The output will be 1,2

然后将其余部分也检查两次:

i=1   
$((++i)) // The output will be 2,3

为了echo $((i=i+1))它的行为与预增量相同,即(如等式所示)它将把 +1 分配给 1 的值,然后输出结果。

为了测试结果,我编写了一个小脚本来玩:

x=1
xx=$((x++))

y=1
yy=$((y=y+1))

z=1
zz=$((++z))

echo $xx "Post-Increment"
echo $yy "Y+1 Sum / Same as Pre-Increment"
echo $zz "Pre-Increment"

if [ $xx -eq $yy ]; then
 echo "Post-Increment X equals normal Y+1 method.. yeah right.."
elif [ $xx -eq $zz ]; then
 echo "Post-Increment X equals Pre-Increment Z.. yeah sure..no problem"
elif [ $yy -eq $zz ]; then
 echo "Normal Y+1 method equals Pre-Increment Z.. BINGO! You get a cookie"
fi

答案2

传统上,i++ 是后置增量运算符,这意味着新的增量值直到下一次引用它时才可用。而前置增量运算符 ++i 会使增量值立即可用。i=i+1 的使用不使用此逻辑,因为该行为特定于增量运算符。

相关内容