Tại sao a = 0; cho phép ++ trả về mã thoát 1?


16

Thử nó:

$ 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

Tương phản với điều này:

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

Và điều này (từ Sirex ):

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

Chuyện gì đang xảy ra ở đây?

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

Câu trả lời:


19

Từ help let:

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

var++hậu kỳ , tôi đoán rằng đối số cuối cùng sẽ đánh giá bằng không. Tế nhị...

Một minh họa có lẽ rõ ràng hơn:

$ 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
điểm tốt. Tôi đoán ++ a sẽ hành động giống như + = 1 sau đó
Sirex

Đúng, hoạt động.
l0b0

1
Đối với bản ghi, hành vi này giống với trường hợp ksh88 của tôi (mặc dù tăng sau let a++không hoạt động)
rahmu

1
Cảm ơn, điều đó đã giúp tôi. - Và tôi sẽ không lãng phí thêm thời gian và hỏi: "Tại sao?"
không phải người dùng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.