कमांड-लाइन - इसका उद्देश्य क्या है &&?
खोल में, जब तुम देखते हो
$ command one && command two
अभिप्राय उस कमांड को निष्पादित करना है जो &&केवल पहले कमांड के सफल होने पर अनुसरण करता है। यह पॉज़िक्स के गोले का मुहावरा है, न कि केवल बैश में।
यह पहली बार विफल होने पर दूसरी प्रक्रिया को चलाने से रोकने का इरादा रखता है।
आप देख सकते हैं कि मैंने "आशय" शब्द का उपयोग किया है - यह अच्छे कारण के लिए है। सभी कार्यक्रमों में समान व्यवहार नहीं होता है, इसलिए इसे काम करने के लिए, आपको यह समझने की आवश्यकता है कि कार्यक्रम "विफलता" को क्या मानता है और यह कैसे प्रलेखन को पढ़कर इसे संभालता है और यदि आवश्यक हो, तो स्रोत कोड।
आपका शेल सच के लिए 0 का रिटर्न मान मानता है, झूठे के लिए अन्य सकारात्मक संख्या
कार्यक्रम बाहर निकलने पर एक संकेत लौटाते हैं । यदि वे सफलतापूर्वक बाहर निकल जाते हैं या वे शून्य से अधिक हो जाते हैं तो उन्हें वापस लौटना चाहिए। यह प्रक्रियाओं के बीच सीमित मात्रा में संचार की अनुमति देता है।
&&कहा जाता है AND_IFमें POSIX खोल व्याकरण है, जो एक का हिस्सा है and_orसूची आदेशों की है, जो भी शामिल ||है जो एक है OR_IFसमान अर्थ विज्ञान के साथ।
व्याकरण प्रतीकों, प्रलेखन से उद्धृत:
%token AND_IF OR_IF DSEMI
/* '&&' '||' ';;' */
और व्याकरण (प्रलेखन से उद्धृत), जो दर्शाता है कि किसी भी संख्या में AND_IFs ( &&) और / या OR_IFs ( ||) को एक साथ मारा जा सकता है (जैसा and_orकि पुनरावर्ती रूप से परिभाषित किया गया है):
and_or : pipeline
| and_or AND_IF linebreak pipeline
| and_or OR_IF linebreak pipeline
दोनों संचालकों में समान रूप से समानता है और उनका बाएं से दाएं मूल्यांकन किया जाता है (वे बाएं सहयोगी हैं)। डॉक्स कहते हैं:
एक AND-ORसूची ऑपरेटरों द्वारा अलग की गई एक या एक से अधिक पाइपलाइनों का अनुक्रम है "&&"और "||"।
सूची में एक या अधिक का एक क्रम है और-या सूचियों ऑपरेटरों द्वारा अलग ';'और '&'और वैकल्पिक रूप से इन्हें समाप्त ';', '&', या।
ऑपरेटरों "&&"और "||"समान पूर्वता होगी और बाईं संगति के साथ मूल्यांकन किया जाएगा। उदाहरण के लिए, निम्नलिखित दोनों कमांड मानक आउटपुट के लिए पूरी तरह से बार लिखते हैं:
$ false && echo foo || echo bar
$ true || echo foo && echo bar
पहले मामले में, झूठ एक कमांड है जो स्थिति की स्थिति से बाहर निकलता है 1
$ false
$ echo $?
1
जिसका अर्थ echo fooहै (यानी शार्टसर्किटिंग echo foo) नहीं चलता है । फिर कमांड echo barनिष्पादित किया जाता है।
दूसरे मामले में, सच एक कोड के साथ बाहर निकलता है 0
$ true
$ echo $?
0
और इसलिए echo fooनिष्पादित नहीं किया जाता है, तब echo barनिष्पादित किया जाता है।
false && echo "Will not be printed"।