जहां तक मुझे पता था, [[
और [
कुछ अतिरिक्त विशेषताओं को ध्यान में रखते हुए [[
को ध्यान में रखते हुए अपेक्षा की जा सकती है।[और [[? के बीच octal विस्तार अंतर
$ b=010; echo $((b))
8
$ [[ $b -eq 8 ]]; echo $?
0
लेकिन
$ [ $b -eq 8 ]; echo $?
1
$ test $b -eq 8; echo $?
1
$ [ $b -eq 10 ]; echo $?
0
क्यों उत्तरार्द्ध अभिव्यक्ति ड्रॉप करता ऑटो अष्टाधारी रूपांतरण: लेकिन हाल ही में मैं कैसे बैश व्यवहार करता है अष्टाधारी विस्तार में एक विसंगति देखा? -eq
जैसे अभिव्यक्ति help test
के अनुसार बाश में और के अनुसार "अंकगणित" हैं, और आगे के संदर्भ वाले मैनुअल स्थिरांक के अगले खंड के अनुसार एक प्रमुख शून्य के साथ ऑक्टल के रूप में माना जा सकता है। , यह बीजीय, नहीं अंकगणित रूप test
में -eq
भाव को दर्शाता है हालांकि POSIX गणित भाव अभी भी अपने ऑक्टल मान के लिए अग्रणी शून्य पूर्णांकों का विस्तार:
POSIX श थोड़ा कम स्पष्ट on the subject है।
क्या कोई दस्तावेज या सबूत है कि यह सुझाव देने के लिए कि [[
और [
के बीच उद्देश्य पर ऑक्टेट विस्तार के लिए भेद बनाता है, या यह केवल एक आकस्मिक विशेषता है?
+1; लेकिन मुझे लगता है कि यद्यपि '-eq' को" अंकगणितीय बाइनरी ऑपरेटर "के रूप में वर्णित किया गया है, इसके तर्क * नहीं * वर्णित अभिव्यक्ति के रूप में वर्णित हैं। इसलिए, उदाहरण के लिए, '[b -eq 10] 'शैल पैरामीटर' $ b' का विस्तार नहीं करता है। इसलिए जब यह निश्चित रूप से उस ऑपरेटर के लिए 10 से 10 के बजाय 8 0 के रूप में इलाज करने के लिए अधिक समझ में आता है, तो मुझे मैन्युअल में कुछ भी दिखाई नहीं देता है जो वास्तव में आपके द्वारा देखे जा रहे व्यवहार के विपरीत है। – ruakh
'[[b -eq 8]]' '((बी == 8)) के समतुल्य प्रतीत होता है '(आप' $ 'को छोड़ सकते हैं)। प्रलेखन ऐसा नहीं लगता है। – choroba
@ चोरोबा अच्छा बिंदु, मुझे यह भी एहसास नहीं हुआ था कि '[[x -eq y]]' एक्स और वाई को '(())' अभिव्यक्तियों की तरह बढ़ाता है। – kojiro