set -e
पर BASH manpage को देखते हुए:
यहाँ कुछ समाधान कर रहे हैं
बाहर निकलें तुरंत अगर एक साधारण आदेश (ऊपर शेल व्याकरण) एक गैर शून्य की स्थिति के साथ बाहर निकल जाता है। [...]
तो, यदि कोई कथन गैर-शून्य निकास कोड देता है, तो खोल बाहर निकल जाएगा।
, BASH manpage पर एक नज़र ले रहा है let
आदेश पर:
पिछले आर्ग का मूल्यांकन करता है, तो 0 करने के लिए, रिटर्न 1 करते हैं; 0 अन्यथा वापस आ गया है।
लेकिन प्रतीक्षा करें! i++
का उत्तर एक है और शून्य नहीं है! यह काम करना चाहिए था!
फिर से, इस सवाल का जवाब वेतन वृद्धि ऑपरेटर पर मार मैनपेज साथ है:
आईडी ++ id--: चर के बाद वेतन वृद्धि और बाद घटती
ठीक है, तो स्पष्ट नहीं है। इस खोल स्क्रिप्ट का प्रयास करें:
#!/bin/bash
set -e -v
i=1; let ++i; echo "I am still here"
i=0; let ++i; echo "I am still here"
i=0; ((++i)); echo "I am still here"
हममम ... उम्मीद रूप में काम करता है, और सब मैंने किया था प्रत्येक पंक्ति में परिवर्तन i++
++i
गया था।
i++
पोस्ट-वृद्धि ऑपरेटर है। इसका मतलब है कि यह वृद्धि कर देता है i
के बादlet
बयान एक मान देता है। चूंकि i
शून्य से पहले वृद्धि की जा रही थी, let
बयान एक गैर शून्य मान देता है।
हालांकि, ++i
पूर्व-वृद्धि ऑपरेटर है। इसका अर्थ यह है कि बाहर निकलने की स्थिति लौटने से पहले i
बढ़ता है। चूंकि i
1
पर बढ़ाया गया है, इसलिए निकास स्थिति शून्य हो जाती है।
मुझे उम्मीद है कि यह समझ में आता है।
मैं कभी नहीं एक अहानिकर देख वेतन वृद्धि की उसने कल्पना भी होगा साथ '-e' सेट इस अनायास ही बातचीत पड़ा है। भाग्यशाली मुझे यह सवाल मिला। –