为什么a = 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)

Answers:


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 2012年

1
根据记录,此行为在我的ksh88实例上是相同的(尽管后增量let a++不起作用)
rahmu 2012年

1
谢谢,这对我有所帮助。-我不会再浪费时间问:“为什么?”
非用户
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.