Mengapa a = 0; biarkan ++ mengembalikan kode keluar 1?


16

Cobalah:

$ 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

Kontras dengan ini:

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

Dan ini (dari Sirex ):

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

Apa yang terjadi disini?

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

Jawaban:


19

Dari help let:

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

Sejak var++adalah posting Increment, saya kira argumen terakhir tidak mengevaluasi ke nol. Halus...

Ilustrasi yang mungkin lebih jelas:

$ 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
tempat yang bagus. Saya menduga ++ a akan bertindak sama dengan + = 1 saat itu
Sirex

Yap, itu berhasil.
l0b0

1
Sebagai catatan, perilaku ini sama pada contoh ksh88 saya (meskipun kenaikan let a++tidak bekerja)
rahmu

1
Terima kasih, itu membantu saya. - Dan saya tidak akan membuang waktu lagi dan bertanya: "Mengapa?"
bukan pengguna
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.