Dlaczego a = 0; niech ++ zwraca kod wyjścia 1?

16

Spróbuj:

$ 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

Porównaj to z:

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

A to (od Sirex ):

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

Co tu się dzieje?

$ bash --version
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)
l0b0
źródło

Odpowiedzi:

19

Od help let:

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

Ponieważ var++jest to post- inkrementacja, chyba ostatni argument ma wartość zero. Subtelny...

Być może jaśniejsza ilustracja:

$ 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
źródło
1
dobre miejsce. zgaduję ++ a działałby tak samo jak + = 1 wtedy
Sirex
Tak, to działa.
l0b0
1
Dla przypomnienia, to zachowanie jest takie samo w mojej instancji ksh88 (chociaż post-increment let a++nie działa)
rahmu
1
Dzięki, pomogło mi to. - I nie będę marnować więcej czasu i pytam: „Dlaczego?”
not-a-user