ऐतिहासिक रूप से, test
कमान पहले अस्तित्व में थी ( 1979 में कम से कम यूनिक्स सातवें संस्करण में वापस आ गई )। यह ऑपरेटरों का उपयोग किया =
और !=
तार तुलना करने के लिए, और -eq
, -ne
, -lt
, आदि संख्याओं की तुलना करने के लिए। उदाहरण के लिए, test 0 = 00
गलत है, लेकिन test 0 -eq 00
सच है। मुझे नहीं पता कि इस सिंटैक्स को क्यों चुना गया था, लेकिन इसका उपयोग करने से बचने के लिए हो सकता है <
और >
, जो शेल को पुनर्निर्देशित ऑपरेटरों के रूप में पार्स किया गया होगा। test
आदेश कुछ साल बाद एक और वाक्य रचना है: [ … ]
के बराबर है test …
।
[[ … ]]
सशर्त वाक्य रचना है, जो अंदर <
और >
के हवाले से बिना ऑपरेटर के रूप में इस्तेमाल किया जा सकता है, बाद में ksh में जोड़ा गया है,। इसने पिछड़ी संगतता को बनाए रखा [ … ]
, इसलिए इसने समान ऑपरेटरों का उपयोग किया, लेकिन जोड़ा <
और >
तार की तुलना करना (उदाहरण के लिए, [[ 9 > 10 ]]
लेकिन [[ 9 -lt 10 ]]
)। अधिक जानकारी के लिए, एकल या डबल ब्रैकेट का उपयोग करके देखें - बैश
अंकगणित भाव भी बाद में की तुलना में आया test
आदेश, कॉर्न खोल में , 1980 के दशक में कुछ समय में। उन्होंने सी भाषा के वाक्य विन्यास का अनुसरण किया, जो यूनिक्स हलकों में बहुत लोकप्रिय था। इस प्रकार उन्होंने सी के ऑपरेटरों का उपयोग किया: ==
समानता के लिए, <=
कम-या-बराबर आदि के लिए।
यूनिक्स सातवें संस्करण में अंकगणितीय अभिव्यक्तियां नहीं थीं, लेकिन इसमें expr
कमांड थी , जिसने पूर्णांक संचालन के लिए सी-जैसे सिंटैक्स लागू किया, जिसमें इसके तुलनात्मक ऑपरेटर भी शामिल थे। एक खोल स्क्रिप्ट में, इसके पात्र <
और >
था उन्हें खोल से बचाने के लिए उद्धृत किया जा करने के लिए, उदाहरण के लिए if expr 1 \< 2; …
के बराबर है if test 1 -lt 2; …
। शेल में अंकगणितीय अभिव्यक्तियों के अलावा expr
अप्रचलित के अधिकांश उपयोग किए गए हैं , इसलिए यह आज अच्छी तरह से ज्ञात नहीं है।
एक स्क्रिप्ट में, आप एक पूर्णांक मान की गणना करने के लिए, और [ … ]
पूर्णांकों की तुलना करने के लिए आम तौर पर अंकगणितीय अभिव्यक्तियों का उपयोग करेंगे ।
if [ "$((x + y))" -lt "$z" ]; then …
एक ksh, bash या zsh स्क्रिप्ट में, आप ((…))
दोनों के लिए उपयोग कर सकते हैं ।
if ((x + y < z)); then …
[[ … ]]
आप पूर्णांक के अलावा अन्य चीजों को शामिल सशर्त उपयोग करना चाहते हैं रूप से उपयोगी है।
= != < <= > >=
तार की तुलना करें ।1 -eq 01
लेकिन1 != 01
और8 -lt 42
लेकिन8 > 42