なぜ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)

回答:


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

うん、うまくいく。
l0b0

1
記録では、この動作は私のksh88インスタンスで同じです(ただし、ポストインクリメントlet a++は機能しません)
-rahmu

1
おかげで、それは私を助けました。-そして、私はこれ以上時間を無駄にせず、「なぜ?」
非ユーザー14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.