Pourquoi a = 0; laisser un ++ retourner le code de sortie 1?

16

Essayez-le:

$ a=0
$ let a++
$ echo $?
1 # Did the world just go mad?
$ echo $a
1 # Yes, it did.
$ let a++
$ echo $?
0 # We have normality.
$ echo $a
2

En contraste avec ceci:

$ b=0
$ let b+=1
$ echo $?
0

Et ceci (de Sirex ):

$ c=0
$ let ++c
$ echo $?
0

Qu'est-ce qui se passe ici?

$ bash --version
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)
l0b0
la source

Réponses:

19

De help let:

Exit Status:
If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise..

Puisque var++c'est post- incrément, je suppose que le dernier argument est évalué à zéro. Subtil...

Une illustration peut-être plus claire:

$ let x=-1 ; echo x=$x \$?=$?
x=-1 $?=0
$ let x=0 ; echo x=$x \$?=$?
x=0 $?=1
$ let x=1 ; echo x=$x \$?=$?
x=1 $?=0
$ let x=2 ; echo x=$x \$?=$?
x=2 $?=0
l0b0
la source
1
bon endroit. je suppose que ++ a agirait de la même manière que + = 1
Sirex
Oui, ça marche.
l0b0
1
Pour mémoire, ce comportement est le même sur mon instance ksh88 (bien que la post-incrémentation let a++ne fonctionne pas)
rahmu
1
Merci, ça m'a aidé. - Et je ne perdrai plus de temps et demanderai: "Pourquoi?"
non-utilisateur