2012-05-29 16 views
69

आप कैसे अनंत छोरों लागू किया जाना चाहिए को देखते हैं, आप ज्यादातर इस दृष्टिकोण देखें:"जबकि:" बनाम "सच है, जबकि"

while : 
do 
    # loop infinitely 
done 

लेकिन मैं यहाँ : के उपयोग समझ में नहीं आता। यह उपयोग करने के लिए बेहतर नहीं होगा:

while true 
do 
    # loop infinitely 
done 

?

+5

'सत्य' के बाद कोई कॉलन आवश्यक नहीं है, जैसा कि ':' एक कमांड है, सिंटैक्स नहीं। – chepner

उत्तर

51
पुस्तिका से

:

: [तर्क] कोई प्रभाव नहीं; आदेश तर्कों का विस्तार करने और किसी भी निर्दिष्ट पुनर्निर्देशन करने से परे कुछ भी नहीं करता है। शून्य निकास कोड वापस कर दिया जाता है।

इस हमेशा शून्य है इसलिए रिटर्न के रूप में बाहर true

चेक इस जवाब में इस्तेमाल किया जा के समान है के रूप में: What Is the Purpose of the `:' (colon) GNU Bash Builtin?

17

पेट के एक built-in command कि कुछ भी नहीं करता है, लेकिन रिटर्न 0 (सफलता) है। इस प्रकार, यह एक ही चीज करने के लिए एक वास्तविक कमांड को कॉल करने से छोटा (और तेज़) है।

+1

यह सच है। 'मैं 0 =; सही समय जबकि; करें ((i ++> 100000)) && ब्रेक; किया 'कोलन संस्करण से थोड़ा लंबा लगता है। –

+12

अंतर में कमांड बनाम बिल्टिन के साथ कुछ भी नहीं है, क्योंकि वे दोनों अंतर्निहित हैं। यह पूरी तरह से वर्णों की अतिरिक्त संख्या के साथ काम कर रहा है। 'जबकि: कुछ gibberish', अभी भी' '' का उपयोग कर, 'सत्य' से धीमा है। इसकी तुलना किसी बाहरी कमांड से करें, जैसे 'while/bin/true', जो सचमुच सौ गुना धीमी है। –

+0

मुझे 'सत्य के दौरान' और '1 वें' के बीच मतभेदों के कारण लाल हेरिंग के बाद यह प्रश्न मिला - यह पता चला कि '1'' सीडी -' को अलियाड किया गया है जो स्पष्ट रूप से गुजर रहा था लेकिन प्रिंटिंग '~' (मेरा सीडब्ल्यूडी समय।) 'चेतावनी' के साथ एक चेतावनी: मैंने इसे आजमाने के बाद देखा: सामान्य नियम ':' पर लागू होते हैं, इसलिए आपको इसे अर्धविराम (या इस तरह के मामलों में एक लाइन ब्रेक के साथ समाप्त करने की आवश्यकता होती है, जहां आपके पास एक संलग्न नहीं है ब्लॉक।) तो, एक लाइनर के लिए, आप 'while: लिखेंगे; कर ...; किया गया '' के विरोध में: \ n करें ... \ n किया गया '। वास्तव में यह शायद ही कभी एक चेतावनी है। –