2013-01-24 10 views
11

में डबल स्क्वायर ब्रैकेट का अर्थ question in the answer from Kyle Brandt पर [[ ]] निर्माण को "बैश बिल्ट-इन टेस्ट कमांड" के रूप में वर्णित किया गया है। निम्नलिखित उदाहरण के रूप में दिखाया गया है।बैश

if [[ ($a -gt 2) && ($a -lt 5) ]]; then ... 

क्यों डबल वर्ग कोष्ठक, सचमुच [[ ]], जरूरी हैं?

उत्तर

2

[[ ]]test कीवर्ड के बराबर हैं।

तुम भी [ ] उपयोग कर सकते हैं लेकिन [[ ]] अगर मैं सवाल का वास्तविक अर्थ समझते हैं, सवाल ही अच्छी तरह से तैयार की नहीं है, सब खोल प्रकार

मेरे लिए

साथ संगत नहीं है।
उन कोष्ठक यहाँ तो क्रम निर्धारण के लिए बहुत ज्यादा नहीं होना चाहिए, लेकिन क्योंकि बैश सार उन्हें आवश्यकता

संपादित

प्रश्न भी बदल गया है, तो मेरा उत्तर।

[[ ]][ ] के खिलाफ उपयोग किया जाता है क्योंकि आपको परीक्षण के बाईं ओर उद्धृत करने की चिंता करने की आवश्यकता नहीं है जिसे एक चर के रूप में पढ़ा जाएगा।
इसके अलावा, < और >

+0

के लिए संदर्भ लें here अगर मैं उपयोग कर सकते हैं '[]', आप कह रहे हैं वहाँ 'उपयोग करने के लिए [[]] एक कारण नहीं है '। – H2ONaCl

+0

आप सही हैं, संचालन के आदेश के पास इस सवाल से कोई लेना देना नहीं है, इसलिए मैंने ऑपरेशन के आदेश को निर्धारित करने के लिए '()' के किसी भी उल्लेख को हटाने के लिए प्रश्न संपादित किया। – H2ONaCl

+0

@ ब्रोअन: यदि आपको पोर्टेबल होने की चिंता करने की ज़रूरत नहीं है, तो कोई इसका समर्थन करता है कि '[[]]' बेहतर है क्योंकि आपको परीक्षण के बाईं ओर उद्धृत करने की चिंता करने की आवश्यकता नहीं है, इसे एक चर के रूप में पढ़ा जाएगा। इसके अलावा, '<' and '>' से बचने की आवश्यकता नहीं है – DonCallisto

8

भाग निकले जाने की जरूरत नहीं है [[है एक और अधिक बहुमुखी बैश में के संस्करण [।

उदाहरण के लिए, [[...]] परीक्षण निर्माण का उपयोग [...] स्क्रिप्ट में कई तर्क त्रुटियों को रोक सकता है। उदाहरण के लिए, & &, || <, और> ऑपरेटर [[]] परीक्षण के भीतर काम करते हैं, [] निर्माण में त्रुटि देने के बावजूद।

भी अपने कार्यान्वयन अलग

-bash-3.2$ type [ 
[ is a shell builtin 
-bash-3.2$ type [[ 
[[ is a shell keyword 

एक अच्छा स्पष्टीकरण

+2

इससे भी बदतर है; '[" $ यह ">" $ वह "] 'कोई त्रुटि नहीं देगा, यह केवल आपके द्वारा अपेक्षित चीज़ों से कुछ अलग करेगा। (विशेष रूप से: यह आउटपुट को '$ this' द्वारा निर्दिष्ट फ़ाइल में रीडायरेक्ट करेगा, फिर जांच करें कि '$ that' nonblank है या नहीं।) –