व्यवहार में अंतर
बैश 4.3.11 पर कुछ अंतर:
सिफ़ारिश : हमेशा उपयोग []
।
[[ ]]
मेरे द्वारा देखे गए प्रत्येक निर्माण के लिए POSIX समकक्ष हैं ।
यदि आप का उपयोग करें [[ ]]
:
- पोर्टेबिलिटी खो देते हैं
- पाठक को दूसरे बैश एक्सटेंशन की पेचीदगियों को सीखने के लिए मजबूर करें।
[
एक अजीब नाम के साथ सिर्फ एक नियमित आदेश है, कोई विशेष शब्दार्थ शामिल नहीं है।
¹ [[...]]
कोर्न शेल में समतुल्य निर्माण से प्रेरित
² लेकिन के कुछ मूल्यों के लिए विफल रहता है a
या b
(जैसे +
या index
) और संख्यात्मक तुलना करता है, तो करता है a
और b
दशमलव की तरह लग रहे पूर्णांकों। expr "x$a" '<' "x$b"
दोनों के आसपास काम करता है।
³ और यह भी के कुछ मूल्यों के लिए विफल रहता है a
या b
की तरह !
या (
।
⁴ 3.2 और उसके बाद के संस्करण में और bash 3.1 के लिए अनुकूलता प्रदान की गई (सक्षम नहीं है BASH_COMPAT=3.1
)
⁵ हालांकि समूहीकरण (यहाँ के साथ {...;}
आदेश समूह के बजाय (...)
जो एक अनावश्यक subshell चल पाएंगे) नहीं के रूप में आवश्यक है ||
और &&
खोल ऑपरेटरों (के रूप में करने का विरोध किया ||
और &&
[[...]]
ऑपरेटर या -o
/ -a
[
ऑपरेटरों) बराबर पूर्वता है। तो [ a = a ] || [ a = b ] && [ a = b ]
समकक्ष होगा।
[[
साथ कोड अच्छा और स्पष्ट है, लेकिन उस दिन को याद रखें जब आप सिस्टम पर अपने स्क्रिप्टवर्क को डिफ़ॉल्ट शेल के साथ पोर्ट करेंगे जो कि नहीं है ,bash
याksh
आदि[
बदसूरत, बोझिल है, लेकिनAK-47
किसी भी स्थिति में काम करता है।