कैसे बैश में एक पाश से बाहर तोड़ने के लिए?


150

मैं टेक्स्ट को संसाधित करने के लिए एक बैश स्क्रिप्ट लिखना चाहता हूं, जिसके लिए थोड़ी देर के लूप की आवश्यकता हो सकती है।

उदाहरण के लिए, C में थोड़ी देर का लूप:

int done = 0;
while(1) {
  ...
  if(done) break;
}

मैं इसके बराबर एक बैश स्क्रिप्ट लिखना चाहता हूं। लेकिन जो मैंने आमतौर पर इस्तेमाल किया और जैसा कि मैंने पढ़ा है सभी क्लासिक उदाहरण हैं, यह है:

while read something;
do
...
done

यह कैसे करना है while(1){}और इसके बारे में कोई सहायता नहीं देता है break;, जो कि अच्छी तरह से परिभाषित है और व्यापक रूप से सी में उपयोग किया जाता है, और मुझे स्टड के लिए डेटा पढ़ने की ज़रूरत नहीं है।

क्या कोई मुझे उपरोक्त C कोड के बराबर बैश में मदद कर सकता है?

जवाबों:


189

यह अलग नहीं है bash

done=0
while : ; do
  ...
  if [ "$done" -ne 0 ]; then
      break
  fi
done

:नो-ऑप कमांड है; इसकी निकास स्थिति हमेशा 0 होती है, इसलिए लूप तब तक चलता है, जब तक doneकि उसे शून्य-शून्य मान न दिया जाए।


doneलूप से बाहर निकलने के लिए कई तरीके हैं जो आप निर्धारित कर सकते हैं और परीक्षण कर सकते हैं ; जो मैं ऊपर दिखाता हूं वह किसी भी POSIX- संगत शेल में काम करना चाहिए।


doneएक चर नाम के रूप में उपयोग करना ठीक है ? यह एक शेल कीवर्ड है ... किंडा बहुत कम से कम भ्रमित है।
माइकल डोरस्ट

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