दिलचस्प पोस्ट
@ एस्पेस जे विशिष्ट व्याख्या के साथ एक वर्ग के सभी तरीकों के लिए कमाना decodeurIComponent vs unescape, क्या unescape के साथ गलत है? सी ++ – enum बनाम const vs. #define क्रॉन का विंडोज संस्करण क्या है? आप अपाचे मैवेन कैश कैसे साफ़ करते हैं? Android पर ब्लूटूथ डिवाइस को प्रोग्रामेटिक रूप से कैसे जोड़ा जाए उपन्यासकार ने समझाया इंजेक्ट विधि की एक सरल व्याख्या की आवश्यकता है आईआईओ 7 में यूआईटीडेक्स लिंक लिंक का पता लगाने पिन के लिए Emacs बफ़र्स (cscope के लिए) एंड्रॉइड गूगल मैप्स एपीआई वी 2 वर्तमान स्थान पर ज़ूम करें सही जावास्क्रिप्ट विरासत डिबग बिल्ड की तुलना में रिलीज़ बिल्ड अलग तरीके से चलने के कुछ कारण क्या हैं सी # में प्रॉक्सी मूलभूत प्रमाणीकरण: HTTP 407 त्रुटि एप्लिकेशन को अनइंस्टॉल करने से पहले पासवर्ड मांगें

क्या अंतर है?

मैंने बाश मैन पेज को देखा और [[ यह कहता है कि कंडीशनल एक्सप्रेशन तब मैंने कंडीशनल एक्सप्रेशंस सेक्शन देखा और यह उसी ऑपरेटरों को test (और [ रूप में सूचीबद्ध करता है।

तो मुझे आश्चर्य है कि, [ और [[ बाश में] क्या अंतर है?

Solutions Collecting From Web of "क्या अंतर है?"

[[ [ आदेश के लिए बाश का सुधार है। इसमें कई संवर्द्धन होते हैं, जो इसे बेहतर विकल्प बनाते हैं यदि आप लिपियों को लिखते हैं जो लक्ष्य बनाते हैं मेरे पसंदीदा हैं:

  1. यह शेल की एक वाक्यविन्यास विशेषता है, इसलिए इसमें कुछ विशेष व्यवहार है [ नहीं है]। अब आपको पागल की तरह चर का उद्धरण नहीं करना पड़ेगा क्योंकि [[ खाली स्ट्रिंग्स को संभालता है और सफेद स्थान के साथ स्ट्रिंग को अधिक सहजता से उदाहरण के लिए, [ आपको लिखना है

     if [ -f "$file" ] 

    सही खाली स्ट्रिंग या फ़ाइल नामों को उन स्थानों में रिक्त स्थान के साथ व्यवस्थित करने के लिए [[ उद्धरण चिह्नों के साथ अनावश्यक हैं:

     if [[ -f $file ]] 
  2. क्योंकि यह एक वाक्यविन्यास विशेषता है, यह आपको && और || उपयोग करने देता है बूलियन परीक्षणों के लिए ऑपरेटरों और < और > स्ट्रिंग तुलना के लिए [ ऐसा नहीं कर सकते क्योंकि यह एक नियमित कमान और && , || , < , और > को कमांड लाइन तर्क के रूप में नियमित आदेशों के पास नहीं किया गया है।

  3. इसमें नियमित अभिव्यक्ति मिलान करने के लिए एक अद्भुत =~ ऑपरेटर है के साथ [ आप लिख सकते हैं

     if [ "$answer" = y -o "$answer" = yes ] 

    [[ आप इस रूप में लिख सकते हैं

     if [[ $answer =~ ^y(es)?$ ]] 

    यह आपको कब्जा किए गए समूहों तक पहुंचने देता है, जो इसे BASH_REMATCH में BASH_REMATCH । उदाहरण के लिए, यदि आपने ऊपर "हां" भरा टाइप किया है तो ${BASH_REMATCH[1]} "es" होगा

  4. आपको मुफ्त में उर्फ ​​ग्लोबिबिंग से पैटर्न मिलते हैं हो सकता है कि आप हाँ टाइप करने के बारे में कम सख्त हों शायद आप ठीक हैं यदि उपयोगकर्ता y- कुछ भी आपको कवर मिला:

     if [[ $ANSWER = y* ]] 

ध्यान रखें कि यह एक बैश एक्सटेंशन है, इसलिए यदि आप श-संगत स्क्रिप्ट लिख रहे हैं तो आपको इसके साथ रहना होगा [ सुनिश्चित करें कि आपके पास स्क्रिप्ट के लिए #!/bin/bash शेबांग लाइन है अगर आप डबल ब्रैकेट का उपयोग करते हैं

यह भी देखें

  • बाश अकसर किये गए सवाल – "परीक्षण के बीच क्या अंतर है, [और [[??"
  • बैश अभ्यास – बैश टेस्ट
  • सर्वर दोष – बाश में डबल और सिंगल ब्रैकेट्स में क्या अंतर है?
  • [ test बिल्टिन के समान है, और test बाइनरी (मैन टेस्ट) की तरह कार्य करता है)
    • उसी के बारे में काम करता है [ कई यूनिक्स-जैसी वातावरणों में अन्य सभी श-शेल में
    • केवल एक ही स्थिति का समर्थन करता है बाश एंड एंड के साथ कई परीक्षण ऑपरेटरों को अलग-अलग ब्रैकेट में होना चाहिए
    • नैतिक रूप से एक 'नहीं' ऑपरेटर का समर्थन नहीं करता है। किसी शर्त को उलटा करने के लिए, एक का उपयोग करें ! कमांड रिटर्न वैल्यू को चालू करने के लिए शेल की सुविधा का उपयोग करने के लिए पहले ब्रैकेट के बाहर।
    • == और != वाकई स्ट्रिंग तुलना हैं
  • [[ एक बाश है
    • बाश-विशिष्ट है, हालांकि अन्य गोले ने इसी तरह के निर्माण किया हो सकता है एक पुराने स्कूल यूनिक्स श में यह अपेक्षा न करें।
    • == और != बास पैटर्न मिलान नियमों को लागू करें, देखें "पैटर्न मिलान" में man bash
    • एक =~ regex मिलान ऑपरेटर है
    • कोष्ठकों का उपयोग करने की अनुमति देता है ! , && , और || उप-एक्सप्रेशन को संयोजित करने के लिए ब्रैकेट के भीतर तार्किक ऑपरेटर

इसके अलावा, वे काफी समान हैं – अधिकांश व्यक्तिगत परीक्षण उनके बीच समान रूप से काम करते हैं, केवल चीजें ही दिलचस्प हो सकती हैं जब आपको तार्किक और / या / न ऑपरेशन के साथ अलग-अलग परीक्षणों को संयोजित करने की आवश्यकता होती है।

बाश में, [[ वैरिएबल मानों के शब्द विभाजन को रोकता है।

सबसे महत्वपूर्ण अंतर आपके कोड की स्पष्टता होगी हाँ, हां, ऊपर क्या कहा गया है सच है, लेकिन [[]] आप उच्च स्तरीय भाषाओं में अपेक्षा करते हैं, खासकर AND (और & ), OR ( || ), और NOT ( ! ) ऑपरेटरों इस प्रकार, जब आप सिस्टम और भाषाओं के बीच चलते हैं, तो आप स्क्रिप्ट की व्याख्या करने में सक्षम होंगे, जिससे आपकी ज़िंदगी आसान हो जाएगी। एक अच्छा यूनिक्स / लिनक्स संदर्भ से एनटीआई किरकिरा प्राप्त करें आपको कुछ परिस्थितियों में उपयोगी होने के लिए कुछ गुमराह करने वाले मिल सकते हैं, लेकिन आप हमेशा स्पष्ट कोड की सराहना करेंगे! आप किस स्क्रिप्ट के टुकड़े को पढ़ेंगे? संदर्भ के बाहर भी, पहली पसंद पढ़ने और समझने में आसान है।


 if [[ -d $newDir && -n $(echo $newDir | grep "^${webRootParent}") && -n $(echo $newDir | grep '/$') ]] then ... 

या

 if [ -d "$newDir" -a -n $(echo "$newDir" | grep "^${webRootParent}") -a -n $(echo "$newDir" | grep '/$') ] then ...