El operador de incremento no funciona en una variable si la variable se establece en 0

El operador de incremento no funciona en una variable si la variable se establece en 0

Incrementar una variable varfunciona en bash cuando está entre paréntesis dobles como (( var++ )). Pero descubrí que falla si la variable se establece en 0 de antemano, como var=0.

$ a=0
$ ((a++)) && echo "command succeeded" || echo "command failed"
command failed

$ a=1
$ ((a++)) && echo "command succeeded" || echo "command failed"
command succeeded

¿Alguien puede explicar este comportamiento?

Ambiente:

Estoy usando gnome-terminal en Ubuntu Desktop 18.04.5 LTS.

Respuesta1

Con crédito desde aquí:https://unix.stackexchange.com/questions/146773/why-bash-increment-n-0n-return-error

El valor de retorno de (( expresión )) no indica un estado de error, pero, desde la página de manual de bash:

((expresión)) La expresión se evalúa de acuerdo con las reglas que se describen a continuación en EVALUACIÓN ARITMÉTICA. Si el valor de la expresión no es cero, el estado de retorno es 0; de lo contrario, el estado de devolución es 1. Esto es exactamente equivalente a dejar "expresión".

En ((a++))estás haciendo un incremento de publicación. Se devuelve el valor de ais 0so y 1, después de eso, se incrementa.

Comparar

$ unset a
$ ((a++)) ; echo Exitcode: $? a: $a
Exitcode: 1 a: 1

versus

$ unset a
$ ((++a)) ; echo Exitcode: $? a: $a
Exitcode: 0 a: 1

Un preincremento, así ase ha convertido 1y 0se devuelve.

Respuesta2

Esto funciona para mí (en bashUbuntu),

$ a=0
$ echo $((a++))
0
$ echo $((a++))
1
$ echo $((a++))
2
$ echo $((a++))
3
$ echo $a
4

Note la diferencia con

$ a=0
$ echo $((++a))
1
$ echo $((++a))
2
$ echo $((++a))
3
$ echo $a
3

información relacionada