!#/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 的使用不使用此逻辑,因为该行为特定于增量运算符。