Perché a = 0; lasciare che un ++ restituisca il codice di uscita 1?


16

Provalo:

$ 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

In contrasto con questo:

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

E questo (da Sirex ):

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

Cosa sta succedendo qui?

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

Risposte:


19

Da help let:

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

Dal momento che var++è posta -increment, immagino che l'ultimo argomento non valutare a zero. Delicato...

Un'illustrazione forse più chiara:

$ 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

1
buon posto. suppongo che ++ a si comporterebbe come + = 1 quindi
Sirex,

Sì, funziona.
l0b0

1
Per la cronaca, questo comportamento è lo stesso sulla mia istanza di ksh88 (anche se post-incremento let a++non funziona)
rahmu

1
Grazie, mi ha aiutato. - E non perderò altro tempo e chiederò: "Perché?"
non utente
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.