दिलचस्प पोस्ट
मानचित्र में प्रत्येक प्रविष्टि को प्रभावी ढंग से कैसे पुनरावृत्त करें? IE7 में जावास्क्रिप्ट डीबग करना काम कर रहे regex के साथ PHP preg_match PhpMyAdmin में स्टोर प्रक्रियाएं एसक्यूएल एकाधिक कॉलम क्रम अधिकतम कॉल स्टैक आकार त्रुटि से अधिक हो गया App.config में कनेक्शन स्ट्रिंग एन्क्रिप्ट करें मैं विम के अंदर एक टर्मिनल कैसे चलाऊँ? फेसबुक एंड्रॉइड एसडीके के लिए की हैश जावास्क्रिप्ट के साथ एक JSON ऑब्जेक्ट ट्री के सभी नोड्स को पार करें खोज पद्धति से मुंगोज़ परिणाम कैसे लौटाएंगे? बाश में सिंगल और डबल कोट्स के बीच का अंतर सीएसएस '>' चयनकर्ता; यह क्या है? एएसपी.नेट एमवीसी 5 में फेसबुक v2.4 एपीआई से OAuth ExternalLogin कॉलबैक में ईमेल पते पर पहुंचें एचटीएमएल टैग में एल्िप्सिस (…) सम्मिलित करें यदि सामग्री बहुत व्यापक है

क्या अंतर है?

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

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

वेब के समाधान से एकत्रित समाधान "क्या अंतर है?"

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

  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 ...