क्यों एक = 0; एक ++ वापसी निकास कोड 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
धन्यवाद, इससे मुझे मदद मिली। - और मैं किसी भी समय बर्बाद नहीं करूंगा और पूछूंगा: "क्यों?"
-ए-यूजर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.