Чому a = 0; нехай ++ повертає вихідний код 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
гарне місце. Я здогадуюсь, що ++ a діятиме так само, як + = 1, тоді
Sirex,

Так, це працює.
l0b0

1
Для запису така поведінка однакова і в моєму екземплярі ksh88 (хоча пост-приріст let a++не працює)
rahmu,

1
Дякую, що мені допомогли. - І я більше не витрачаю часу і запитую: "Чому?"
не-користувач
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.