लिनक्स बैश में एम्परसेंड और अर्धविराम के बीच अंतर क्या है ?
उदाहरण के लिए,
$ command1 && command2
बनाम
$ command1; command2
लिनक्स बैश में एम्परसेंड और अर्धविराम के बीच अंतर क्या है ?
उदाहरण के लिए,
$ command1 && command2
बनाम
$ command1; command2
जवाबों:
&&
, अगर बाईं ओर एक गैर शून्य बाहर निकलने की स्थिति, ऑपरेटर रिटर्न कि स्थिति देता है और दाईं ओर (यह शॉर्ट सर्किट) का मूल्यांकन नहीं है अन्यथा यह सही पक्ष का मूल्यांकन और उसके बाहर निकलने स्थिति देता है: ऑपरेटर एक बूलियन AND ऑपरेटर है । यह आमतौर पर यह सुनिश्चित करने के लिए उपयोग किया जाता है कि command2
केवल तभी चलाया जाता है जब command1
सफलतापूर्वक चलाया जाता है।
;
टोकन सिर्फ आदेशों को अलग करती है, तो यह दूसरा आदेश या नहीं, पहले एक सफल होता है की परवाह किए बिना चलेंगे।
&&
एक सिंगल एम्परसेंड से अलग है &
?
&
पृष्ठभूमि में कमांड को चलाने का कारण बनता है, इसलिए हाँ। "इसे पृष्ठभूमि में चलाएं" इससे बहुत भिन्न है "इस अगली कमांड को तभी चलाएं जब यह अन्य सफल हो जाए।"
command1 && command2
कार्यान्वित command2
करता है, तो (और केवल यदि) command1
निष्पादन सफलतापूर्वक समाप्त होता है। यूनिक्स शब्दजाल में, जिसका अर्थ है शून्य से बाहर निकलने वाला कोड / रिटर्न कोड ।
command1; command2
निष्पादित करने के command2
बाद निष्पादित होता है command1
, क्रमिक रूप से। इससे कोई फर्क नहीं पड़ता कि कमांड सफल थे या नहीं।
पूर्व एक सरल तर्क है AND
शॉर्ट सर्किट मूल्यांकन का उपयोग करते हुए , बाद वाला बस दो आदेशों का परिसीमन करता है।
वास्तविक रूप से क्या होता है कि जब पहला प्रोग्राम एक नॉनवेज एग्जिट कोड देता है, तो पूरे AND
का मूल्यांकन किया जाता है FALSE
और दूसरे कमांड को निष्पादित नहीं किया जाएगा। बाद में बस उन दोनों को क्रम में निष्पादित करता है।