Warum ist a = 0; ein ++ Exit-Code 1 zurückgeben lassen?

16

Versuch es:

$ 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

Im Gegensatz dazu:

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

Und das (von Sirex ):

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

Was geht hier vor sich?

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

Antworten:

19

Von help let:

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

Da var++ist Post -increment, ich denke , das letzte Argument nicht auf Null bewerten. Subtil ...

Eine vielleicht klarere Darstellung:

$ 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
quelle
1
gute Stelle. Ich vermute, ++ a würde genauso
verhalten
Ja, das funktioniert.
l0b0
1
Für den Datensatz ist dieses Verhalten auf meiner ksh88-Instanz dasselbe (obwohl das let a++
Nachinkrementieren
1
Danke, das hat mir geholfen. - Und ich werde keine Zeit mehr verschwenden und fragen: "Warum?"
kein Benutzer