Почему а = 0; позвольте a ++ вернуть код выхода 1?


16

Попытайся:

$ 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

Контраст с этим:

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

И это (от Sirex ):

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

Что здесь происходит?

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

Ответы:


19

От help let:

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

Так как var++это сообщение -increment, я предполагаю , что последний аргумент имеет нулевое значение. Тонкий ...

Возможно, более четкая иллюстрация:

$ 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
хорошее место Я предполагаю, что ++ будет действовать так же, как + = 1 тогда
Sirex

Да, это работает.
10

1
Для справки, это поведение одинаково на моем экземпляре ksh88 (хотя постинкремент let a++не работает)
rahmu

1
Спасибо, это помогло мне. - И я не буду больше тратить время и спрашиваю: «Почему?»
не пользователь
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.