के बजाय && का उपयोग करने का क्या कारण है; एक ही लाइन पर कमांड करने के लिए जगह?


30

लिनक्स में एक विशेषज्ञ नहीं होने के नाते यूनिक्स नहीं मैं सोच रहा हूं कि एक ही पंक्ति पर 2 कमांडों को स्ट्रिंग करने के इन 2 तरीकों के बीच क्या अंतर है? मुझे इस सरलीकृत उदाहरण में आउटपुट में कोई अंतर नहीं दिखता है

Pete$date ; time
Sun Mar 17 19:37:20 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

Pete$date &&time
Sun Mar 17 19:37:46 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

यह कोई समस्या नहीं है - मैं बस उत्सुक हूँ ..

जवाबों:


43

&&एक तार्किक 'और' है। पहले तर्क का मूल्यांकन किया जाता है, और दूसरे का मूल्यांकन केवल तभी किया जाता है जब पहले वाला सच हो जाता है। कारण यह है कि "गलत और कुछ" हमेशा गलत होता है, इसलिए इस मामले में दूसरे तर्क का मूल्यांकन करने की आवश्यकता नहीं है।

तो &&आप का उपयोग करके यह सुनिश्चित करें कि यदि पहले एक त्रुटि दर्ज की गई है ( trueतो निकास कोड द्वारा प्रतिनिधित्व किया जाता है 0, जो इंगित करता है कि कोई त्रुटि नहीं थी) दूसरी कमान निष्पादित नहीं हुई है । इसके विपरीत, ;दोनों आज्ञाओं को निष्पादित करता है, कोई फर्क नहीं पड़ता कि पहले एक का परिणाम क्या है।

निष्कर्ष: आदेशों का पालन करना &&एक अच्छी आदत है। इसके विपरीत ;अगर कुछ गलत हुआ तो बाद की आज्ञाओं पर अमल नहीं किया जाएगा।


क्या आपका मतलब यह है कि 0इसका मतलब है trueया यह 0सच है - वहाँ एक त्रुटि है?
माइकल बटलर

1
@ मिचेल बटलर: का 0मतलब है true। मैंने एक स्पष्टीकरण जोड़ा है।
अज़ीमुत

26

;

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

# sh -c "exit 0" ; echo "2nd command"
2nd command
# sh -c "exit 1" ; echo "2nd command"
2nd command

&&

तार्किक और

अगले आदेश को निष्पादित करें, लेकिन केवल तभी जब पिछली कमांड सफल हुई (निकास स्थिति थी 0):

# sh -c "exit 0" && echo "2nd command"
2nd command
# sh -c "exit 1" && echo "2nd command"
#

||

तार्किक या

अगले आदेश को निष्पादित करें, लेकिन केवल तभी जब पिछली कमांड विफल हो गई (निकास स्थिति नहीं थी 0 ):

# sh -c "exit 0" || echo "2nd command"
#
# sh -c "exit 1" || echo "2nd command"
2nd command

6
इसके अलावा, इन उदाहरणों के साथ , और के साथ sh -c "exit 0"प्रतिस्थापित किया जा सकता है । truesh -c "exit 1"false
फ्लिम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.