लिनक्स बैश में डबल-एम्परसेंड (&&) और अर्धविराम (?) के बीच अंतर क्या है?


112

लिनक्स बैश में एम्परसेंड और अर्धविराम के बीच अंतर क्या है ?

उदाहरण के लिए,

$ command1 && command2

बनाम

$ command1; command2

6
मैंने इसका यहाँ उत्तर
Etan Reisner

9
ऑफ-टॉपिक के बारे में, पिछली बार जब मैंने जाँच की थी, तब भी बैश एक प्रोग्रामिंग लैंग्वेज थी, लेकिन मैं पहले भी गलत था और यह कुछ ड्राई फ्रूट कैंडी हो सकती है।
स्टीव के

यह है, और क्या आप एक विशिष्ट व्यवहार या किसी निश्चित चीज़ को करने के सही तरीके के बारे में एक सवाल पूछ रहे थे, यह निश्चित रूप से विषय पर होगा। यह "भाषा की वाक्य रचना के बारे में सवाल" की एक श्रेणी में आता है, जो स्पष्ट रूप से "प्रोग्रामिंग" सवाल नहीं है जहां तक ​​मैं चिंतित हूं।
इटन रिस्नर

4
बाश कुछ मायनों में सूखा है, और कुछ मायनों में मीठा है। दिन के अंत में यह काफी सुखद और सुपाच्य है। हालाँकि, यह आसानी से शिशुओं से चुराया नहीं जा सकता है।
code_monk

जवाबों:


138

&&, अगर बाईं ओर एक गैर शून्य बाहर निकलने की स्थिति, ऑपरेटर रिटर्न कि स्थिति देता है और दाईं ओर (यह शॉर्ट सर्किट) का मूल्यांकन नहीं है अन्यथा यह सही पक्ष का मूल्यांकन और उसके बाहर निकलने स्थिति देता है: ऑपरेटर एक बूलियन AND ऑपरेटर है । यह आमतौर पर यह सुनिश्चित करने के लिए उपयोग किया जाता है कि command2केवल तभी चलाया जाता है जब command1सफलतापूर्वक चलाया जाता है।

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


6
क्या डबल एम्परसेंड बैश में &&एक सिंगल एम्परसेंड से अलग है &?
चार्ली पार्कर

16
@CharlieParker &पृष्ठभूमि में कमांड को चलाने का कारण बनता है, इसलिए हाँ। "इसे पृष्ठभूमि में चलाएं" इससे बहुत भिन्न है "इस अगली कमांड को तभी चलाएं जब यह अन्य सफल हो जाए।"
cdhowie

कमांड 2 केवल कमांड 1 चलाएगा शून्य निकास स्थिति, जिसका अर्थ है कि यह सफलतापूर्वक समाप्त हो गया है ..
निक

33

कमांड 1 && कमांड 2

command1 && command2कार्यान्वित command2करता है, तो (और केवल यदि) command1निष्पादन सफलतापूर्वक समाप्त होता है। यूनिक्स शब्दजाल में, जिसका अर्थ है शून्य से बाहर निकलने वाला कोड / रिटर्न कोड

command1; command2

command1; command2निष्पादित करने के command2बाद निष्पादित होता है command1, क्रमिक रूप से। इससे कोई फर्क नहीं पड़ता कि कमांड सफल थे या नहीं।


6

पूर्व एक सरल तर्क है AND शॉर्ट सर्किट मूल्यांकन का उपयोग करते हुए , बाद वाला बस दो आदेशों का परिसीमन करता है।

वास्तविक रूप से क्या होता है कि जब पहला प्रोग्राम एक नॉनवेज एग्जिट कोड देता है, तो पूरे ANDका मूल्यांकन किया जाता है FALSEऔर दूसरे कमांड को निष्पादित नहीं किया जाएगा। बाद में बस उन दोनों को क्रम में निष्पादित करता है।

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