16

Try it:

$ 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

Contrast with this:

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

And this (from Sirex):

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

What is going on here?

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

From help let:

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

Since var++ is post-increment, I guess the last argument does evaluate to zero. Subtle...

A perhaps clearer illustration:

$ 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
    good spot. i'm guessing ++a would act the same as += 1 then – Sirex Feb 21 '12 at 9:07
  • Yep, that works. – l0b0 Feb 21 '12 at 9:10
  • 1
    For the record, this behaviour is the same on my ksh88 instance (although post-increment let a++ does not work) – rahmu Feb 21 '12 at 10:42
  • 1
    Thanks, that helped me. - And I will not waste any more time and ask: "Why?" – not-a-user Jul 29 '14 at 10:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.