संख्यात्मक तुलना की ऑपरेंड -eq
, -gt
, -lt
, -ge
, -le
और -ne
अंकगणित अभिव्यक्ति के रूप में लिया जाता है। कुछ सीमा के साथ, उन्हें अभी भी एकल शेल शब्द होने की आवश्यकता है।
अंकगणितीय अभिव्यक्ति में चर नामों का व्यवहार शैल अंकगणित में वर्णित है :
शेल चर को ऑपरेंड के रूप में अनुमति दी जाती है; अभिव्यक्ति के मूल्यांकन से पहले पैरामीटर विस्तार किया जाता है। एक अभिव्यक्ति के भीतर, शेल चर भी पैरामीटर विस्तार वाक्यविन्यास का उपयोग किए बिना नाम से संदर्भित किया जा सकता है। एक शेल वैरिएबल जो अशक्त या अशांत है 0 का मूल्यांकन करता है जब पैरामीटर विस्तार वाक्यविन्यास का उपयोग किए बिना नाम से संदर्भित होता है।
और भी:
एक चर के मूल्य का मूल्यांकन एक अंकगणितीय अभिव्यक्ति के रूप में किया जाता है जब इसे संदर्भित किया जाता है
लेकिन मैं वास्तव में प्रलेखन का हिस्सा नहीं ढूँढ सकता, जहां यह कहा गया है कि संख्यात्मक तुलना अंकगणितीय अभिव्यक्ति लेती है। इसके तहत सशर्त कंस्ट्रक्शंस में वर्णित नहीं है [[
, और न ही बैश कंडिशनल एक्सप्रेशंस में इसका वर्णन किया गया है ।
लेकिन, प्रयोग से, जैसा कि ऊपर कहा गया है, यह काम करता है।
तो, इस तरह से काम करता है:
a=6
[[ a -eq 6 ]] && echo y
[[ 1+2+3 -eq 6 ]] && echo y
[[ "1 + 2 + 3" -eq 6 ]] && echo y
यह भी (चर के मूल्य का मूल्यांकन किया जाता है):
b='1 + 2 + 3'
[[ b -eq 6 ]] && echo y
लेकिन यह नहीं है; जब [[ .. ]]
पार्स किया जाता है तो यह एक भी शेल शब्द नहीं होता है, इसलिए सशर्त में एक सिंटैक्स त्रुटि होती है:
[[ 1 + 2 + 3 -eq 6 ]] && echo y
अन्य अंकगणितीय संदर्भों में, व्हाट्सएप के बिना अभिव्यक्ति की कोई आवश्यकता नहीं है। यह प्रिंट 999
, चूंकि कोष्ठक स्पष्ट रूप से सूचकांक में अंकगणितीय अभिव्यक्ति का परिसीमन करता है:
a[6]=999; echo ${a[1 + 2 + 3]}
दूसरी ओर, =
तुलना एक पैटर्न मैच है , और इसमें अंकगणित शामिल नहीं है, और न ही एक अंकगणितीय संदर्भ (सशर्त निर्माण) में किया गया स्वचालित चर विस्तार:
जब ऑपरेटरों ==
और !=
ऑपरेटरों का उपयोग किया जाता है, तो ऑपरेटर के दाईं ओर के स्ट्रिंग को एक पैटर्न माना जाता है और पैटर्न मिलान में नीचे वर्णित नियमों के अनुसार मिलान किया जाता है, जैसे कि एक्सग्लोब शेल विकल्प सक्षम किया गया था। =
ऑपरेटर के समान है ==
।
तो यह गलत है क्योंकि तार स्पष्ट रूप से अलग हैं:
[[ "1 + 2 + 3" = 6 ]]
जैसा कि यह है, भले ही संख्यात्मक मान समान हों:
[[ 6 = 06 ]]
और यहाँ भी, तार ( x
और 6
) की तुलना की जाती है, वे अलग हैं:
x=6
[[ x = 6 ]]
यह चर का विस्तार करेगा, हालांकि, यह सच है:
x=6
[[ $x = 6 ]]
x=1
द्वारा पीछा किया जाता है तो क्या आपका आकलन बदलता है[[ x -gt 2]]
?