के मामले में दो कमांड चलाएं || या &&


11

मैंने && के बारे में पढ़ा है और || और मैं झूठे मामले में दो आदेश चलाना चाहता हूं।

मैंने कोशिश की है ;लेकिन वह हमेशा चल रहा है । मैंने इसे घुंघराले ब्रेसिज़ में डालने की कोशिश की है, { command1; command2 }लेकिन इसके परिणामस्वरूप सिंटैक्स त्रुटि होती है।

मैं कुछ ऐसा करना चाहता हूं

command && echo "Ok, continuing" || echo "Check internet connection"; exit 1

यदि कोई इंटरनेट कनेक्शन नहीं है तो केवल बाहर निकलता है।


1
यह एक साधारण टंकण त्रुटि की तरह लगता है। एक और अधिक दिलचस्प सवाल पूछने के बीच का अंतर है ()और {}
edwinksl

जवाबों:


27

Parens का उपयोग कमांड को एक उप-प्रकार में रखता है जो हमेशा वह नहीं होता जो आप चाहते हैं। वैकल्पिक रूप से, घुंघराले ब्रेसिज़ का उपयोग करें:

command && echo "Ok, continuing" || { echo "Check internet connection"; exit 1; }

यहाँ चाल यह है कि, Parens के विपरीत, ब्रेसिज़ में अंतिम आदेश का पालन किया जाना चाहिए ;

अर्धविराम या न्यूलाइन की आवश्यकता क्यों है

एक घुंघराले ब्रेस एक कमांड के लिए एक वैध तर्क है। उदाहरण के लिए, यहाँ एक तर्क के रूप में एक घुंघराले ब्रेस है echo:

$ echo }
}

नतीजतन, यदि शेल देखता है:

{ command1; command2 }

शेल कमांड 1 की व्याख्या करता है जिसमें कोई तर्क नहीं है और कमांड 2 में एक तर्क है जिसमें चरित्र शामिल है }। एक घुंघराले ब्रेस }को केवल एक समूह को बंद करने के रूप में व्याख्या की जाती है यदि यह अर्धविराम या न्यूलाइन का अनुसरण करता है। उपरोक्त कार्य करने के लिए:

{ command1; command2; }

सदस्यताएँ और बीच का अंतर {...}और(...)

निरीक्षण करें कि निम्नलिखित सेट x10 तक है लेकिन यह कि echoकमांड चलने से पहले उस सेटिंग को भुला दिया गया है :

$ x=0; false || ( echo Hello; x=10 )
Hello
$ echo $x
0

इसके विपरीत, घुंघराले ब्रेसिज़ के साथ, सेटिंग x=10को याद किया जाता है:

$ x=0; false || { echo Hello; x=10; }
Hello
$ echo $x
10

अंतर यह है क्योंकि किसी सबशेल में वेरिएबल असाइनमेंट, सबस्क्रिप्शन पूरा होने के बाद नहीं बचता है।

प्रलेखन

से man bash:

(सूची)

सूची को एक सब-वातावरण में निष्पादित किया जाता है (नीचे COMMAND EXECUTION ENVIRONMENT देखें)। वैरिएबल असाइनमेंट और बिल्डिन कमांड जो शेल के पर्यावरण को प्रभावित करते हैं कमांड के पूरा होने के बाद प्रभाव में नहीं रहते हैं। वापसी की स्थिति सूची की निकास स्थिति है।

{ सूची; }

सूची को केवल वर्तमान शेल वातावरण में निष्पादित किया जाता है। सूची को एक नई पंक्ति या अर्धविराम के साथ समाप्त किया जाना चाहिए। इसे एक ग्रुप कमांड के रूप में जाना जाता है। वापसी की स्थिति सूची की निकास स्थिति है। ध्यान दें कि मेटाचैकर्स (और) के विपरीत, {और} आरक्षित शब्द हैं और ऐसा होना चाहिए जहां किसी आरक्षित शब्द को मान्यता दी जाए। चूंकि वे एक शब्द विराम का कारण नहीं बनते हैं, उन्हें सूची से व्हॉट्सएप या किसी अन्य शेल मेटाचैकर द्वारा अलग किया जाना चाहिए।

[महत्व दिया]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.