Ok, lembre-se de que fazer um ++ i (Pre-Increment) não é o mesmo que i ++ (Post-Increment).
Os pré-incrementos aumentarão o valor antes da saída para o terminal. Os pós-incrementos o farão depois de publicá-lo no terminal. Então você verá que o primeiro valor é o mesmo que o atribuído no primeiro caso.
Para verificar isso, faça isso duas vezes:
i=1
$((i++)) // The output will be 1,2
E depois verifique o resto duas vezes também:
i=1
$((++i)) // The output will be 2,3
Para o echo $((i=i+1))
, ele se comportará da mesma forma que um pré-incremento no sentido de que (conforme mostrado pela equação) ele atribuirá +1 ao valor de 1 e, em seguida, gerará o resultado.
Só para testar os resultados, fiz um pequeno roteiro para brincar:
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