Хорошо помните, что выполнение ++ i (Pre-Increment) не совпадает с i ++ (Post-Increment).
Предварительные приращения увеличат значение перед выходом на терминал. Post-Increments будут делать это после отправки его на терминал. Итак, вы увидите, что первое значение совпадает с назначением в начале первого случая.
Чтобы проверить это, выполните это дважды:
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