Neden a = 0; bir ++ çıkış kodu 1 döndürelim?


16

Dene:

$ 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

Bunun aksine:

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

Ve bu ( Sirex'ten ):

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

Burada neler oluyor?

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

Yanıtlar:


19

Gönderen help let:

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

Yana var++olduğunu sonrası -increment, dün argüman tahmin etmez sıfıra değerlendirir. İnce ...

Belki daha net bir örnek:

$ 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
iyi nokta. ++ a sonra + = 1 ile aynı davranacağını tahmin ediyorum
Sirex

Evet, işe yarıyor.
l0b0 21:12

1
Kayıt için, bu davranış benim ksh88 örneğimde aynıdır (artım sonrası let a++çalışmıyor olsa da )
rahmu

1
Teşekkürler, bu bana yardımcı oldu. - Ve daha fazla zaman kaybetmeyeceğim ve “Neden?” Diye sormayacağım.
kullanıcı değil
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.