बैश / श - के बीच अंतर && और;


136

मैं आम तौर ;पर एक पंक्ति में एक से अधिक कमांड को संयोजित करने के लिए उपयोग करता हूं , लेकिन कुछ लोग पसंद करते हैं &&। क्या कोई अंतर है? उदाहरण के लिए, cd ~; cd -और cd ~ && cd -एक ही चीज़ बनाने लगता है। क्या संस्करण अधिक पोर्टेबल है, उदाहरण के लिए एंड्रॉइड के शेल या जैसे बैश-सब्सेट द्वारा समर्थित किया जाएगा?

जवाबों:


193

यदि पिछला कमांड ;दूसरे के साथ विफल हो गया तो चलेगा।

लेकिन &&दूसरे के साथ नहीं चलेगा।

यह ऑपरेशन के बीच एक "आलसी" तार्किक "और" ऑपरेंड है।


2
दूसरे शब्दों में इसे शॉर्ट-सर्किट व्यवहार मिला है
पीटरचूला

@ वेटर कौन सा? ;एक या &&एक? या आप दोनों का मतलब है?
शयन

@ शायन, द &&
पीटरचौला 19

57

मैं &&बहुत समय पहले पास के कंप्यूटर पर उपयोग कर रहा हूँ :

root# pwd
/
root# cd /tnp/test; rm -rf *
cd: /tnp/test: No such file or directory
...
... and after a while ...
...   
^C

लेकिन मदद नहीं की ...)

cd /tnp/test && rm -rf * सुरक्षित है... ;)


26
सुरक्षित होने के लिए, मैं का उपयोग करेंrm -rf /tnp/test
melvynkim

5
यहां तक ​​कि सुरक्षित rm /tnp/test/ -rfहोने के लिए घातक तरीके से मिसेलिक को रोकने के लिए उपयोग करना बेहतर है
राडो

22

में cmd1 && cmd2, cmd2केवल निष्पादित करता है, तो है cmd1(रिटर्न 0) सफल होता है।

में cmd1 ; cmd2, cmd2किसी भी मामले में निष्पादित किया जाता है।

दोनों निर्माण POSIX- अनुरूप शेल का हिस्सा हैं।


11

&&अगला कमांड निष्पादित करने का मतलब है यदि पिछली स्थिति के साथ बाहर निकले 0. इसके विपरीत, का उपयोग करें ||यानी निष्पादित किया जाना चाहिए यदि पिछली कमांड एक स्थिति के साथ बाहर निकलता है ;हमेशा 0 निष्पादित नहीं के बराबर है ।

बहुत उपयोगी है जब आपको पिछली कमांड के ठीक होने या न होने के आधार पर एक विशेष कार्रवाई करने की आवश्यकता होती है।


5

अलग-अलग कमांडों ;को उनकी पूर्ण स्थिति की परवाह किए बिना क्रमिक रूप से निष्पादित किया जाता है।

इसके साथ &&, दूसरा कमांड तभी निष्पादित किया जाता है जब पहला सफलतापूर्वक पूरा हो जाता है (रिटर्न एग्जिट स्टेटस ऑफ 0)।

इसके तहत बैश मैनपेज में कवर किया गया है Lists। मैं इन दोनों ऑपरेटरों का समर्थन करने के लिए किसी भी यूनिक्स जैसे शेल की उम्मीद करूंगा, लेकिन मुझे विशेष रूप से एंड्रॉइड शेल के बारे में नहीं पता है।


2
यहाँ बैश मैनुअल का लिंक दिया गया है: gnu.org/software/bash/manual/bashref.html#Lists
ग्लेन जैकमैन

3

&&सशर्त निष्पादन की अनुमति देता है, जबकि ;हमेशा दूसरी कमान निष्पादित की जाती है।

उदाहरण के लिए command1 && command2, command2केवल तभी निष्पादित किया जाएगा जब command1समाप्त हो गया हो exit 0, सभी को अच्छी तरह से इंगित करते हुए, जबकि command1 ; command2दूसरी कमांड में हमेशा निष्पादित किया जाएगा, चाहे कोई भी परिणाम हो command1


1

&& तार्किक है और बाश में है। बैश में तार्किक और के शॉर्ट-सर्किट मूल्यांकन है। यह मुहावरा निम्नलिखित को व्यक्त करने का एक सरल तरीका है:


cmd1;rc=$?
if [ $rc -eq 0 ]; then
   cmd2
fi

जहांकि ; संस्करण केवल है:


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