use*_*637 0 gnome command-line gnome-terminal
!#/bin/bash
i=1
echo $((i++))
i=1
echo $((++i))
i=1
echo $((i=i+1))
Run Code Online (Sandbox Code Playgroud)
这是输出
bash increment
1
2
2
Run Code Online (Sandbox Code Playgroud)
我认为表达式 i=i+1 与 i++ 相同。
有没有办法检查两个表达式是否彼此相等?
好的请记住,做 ++i(预增量)与 i++(后增量)不同。
预增量将在输出到终端之前增加值。Post-Increments 将在将其发布到终端后执行此操作。因此,您将看到第一个值与第一种情况的开头分配的值相同。
要检查这一点,只需执行两次:
i=1
$((i++)) // The output will be 1,2
Run Code Online (Sandbox Code Playgroud)
然后也检查其余的两次:
i=1
$((++i)) // The output will be 2,3
Run Code Online (Sandbox Code Playgroud)
因为echo $((i=i+1))它的行为与 Pre-Increment 相同,因为(如等式所示)它将 +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
Run Code Online (Sandbox Code Playgroud)