बैश शैल में सिंगल और डबल कोट्स के बीच क्या अंतर है?

विषयसूची:

बैश शैल में सिंगल और डबल कोट्स के बीच क्या अंतर है?
बैश शैल में सिंगल और डबल कोट्स के बीच क्या अंतर है?
Anonim
उद्धरण चिह्नों में पाठ संलग्न करना कमांड लाइन पर काफी मानक अभ्यास है, खासकर जब नामों में रिक्त स्थान वाली फ़ाइलों से निपटना है, लेकिन आप कैसे जानते हैं कि सिंगल या डबल कोट्स का उपयोग करना है या नहीं? आइए अंतर को देखें, और जब आपको एक बनाम दूसरे का उपयोग करना चाहिए।
उद्धरण चिह्नों में पाठ संलग्न करना कमांड लाइन पर काफी मानक अभ्यास है, खासकर जब नामों में रिक्त स्थान वाली फ़ाइलों से निपटना है, लेकिन आप कैसे जानते हैं कि सिंगल या डबल कोट्स का उपयोग करना है या नहीं? आइए अंतर को देखें, और जब आपको एक बनाम दूसरे का उपयोग करना चाहिए।

सामान्य नियम यह है कि डबल कोट्स अभी भी उद्धरणों के भीतर चर के विस्तार की अनुमति देते हैं, और सिंगल कोट्स नहीं करते हैं। पढ़ते रहिये।

सरल पाठ के साथ उद्धरण

यदि आप टेक्स्ट के कुछ शब्दों को बस संलग्न कर रहे हैं, तो इससे कोई फर्क नहीं पड़ता कि आप किस का उपयोग करते हैं, क्योंकि वे दोनों एक ही काम करेंगे। उदाहरण के लिए, ये दो आदेश दोनों टेस्ट निर्देशिका नामक निर्देशिका बनायेंगे:

mkdir 'Test Directory' mkdir 'Test Directory'

अधिक अनुभवी प्रकार शायद ध्यान दें कि यदि आप चाहें तो आप mkdir टेस्ट निर्देशिका का भी उपयोग कर सकते हैं।

शैल परिवर्तनीय विस्तार

सिंगल और डबल कोट्स के बीच का अंतर अधिक महत्वपूर्ण हो जाता है जब आप कमांड लाइन पर वैरिएबल से निपट रहे हैं-डिफ़ॉल्ट रूप से, बैश पूर्ण स्ट्रिंग में $ test जैसे चर का विस्तार करने जा रहा है। सबसे पहले, हम चर आवंटित करेंगे:

test='This is a test'

अब आप इस चर का उपयोग कमांड लाइन पर कर सकते हैं, इस तरह, जिसे बस आउटपुट करना चाहिए यह एक परीक्षण है कंसोल के लिए:

echo $test

यहां वह जगह है जहां डबल और सिंगल कोट्स के बीच का अंतर अधिक स्पष्ट हो जाता है-जब आप सिंगल कोट्स का उपयोग करते हैं तो चर का विस्तार नहीं किया जा रहा है। उदाहरण के लिए, यदि आप यह आदेश चलाते हैं:

echo '$test'

जब आप सिंगल कोट्स का उपयोग करते हैं तो आपको कमांड लाइन पर '$ test' के अलावा कुछ भी नहीं दिखाई देगा, लेकिन जब आप डबल कोट्स का उपयोग करते हैं तो यह ठीक से आउटपुट होगा:

Image
Image

जब आप कमांड लाइन पर कमांड का विस्तार करने के लिए 'वर्ण का उपयोग करते हैं तो वही काम काम करता है। उदाहरण के लिए, कहें कि आप इसका उपयोग करना चाहते हैं लोक निर्माण विभाग किसी अन्य कमांड के भीतर से कमांड - आपने इसे विस्तारित करने के लिए खोल को बताने के लिए बैकटिक्स का उपयोग किया होगा:

echo `pwd`/test

अगर आप अपने घर के फ़ोल्डर में थे तो आप इस तरह दिखने वाले आउटपुट देखेंगे:

/home/geek/test

कहें, उदाहरण के लिए, आप उस फ़ोल्डर में हैं जिसमें पथ में एक स्थान है, और आप वर्तमान निर्देशिका में फ़ाइल के लिए प्रतीकात्मक लिंक बनाने के लिए ln कमांड का उपयोग करना चाहते हैं। Ln कमांड का उपयोग करते समय आपको आमतौर पर पूर्ण पथ निर्दिष्ट करने की आवश्यकता होती है, इसलिए टाइपिंग को सहेजने के लिए 'pwd` का उपयोग करना अधिक आसान होता है।

देखो जब आप उद्धरणों में संलग्न किए बिना कमांड का प्रयास करते हैं और उपयोग करते हैं तो क्या होता है:

ln –s `pwd`/test /home/geek/linkedname

इसके बजाय, आपको उद्धरणों में घूमने की आवश्यकता होगी:
इसके बजाय, आपको उद्धरणों में घूमने की आवश्यकता होगी:

ln –s '`pwd`/filename' /some/other/path

एक और ठोस उदाहरण के लिए, मान लीजिए कि हमारे पास इस उदाहरण की तरह एक फ़ोल्डर संरचना है, जहां सभी फ़ाइल नामों में रिक्त स्थान हैं:

चूंकि unzip कमांड सभी फ़ाइलों के विरुद्ध इसे चलाने के लिए * का उपयोग करने का समर्थन नहीं करता है, इसलिए आपको इसके बजाय कमांड का उपयोग करना होगा। यहां वह जगह है जहां चीजें दिलचस्प होती हैं:
चूंकि unzip कमांड सभी फ़ाइलों के विरुद्ध इसे चलाने के लिए * का उपयोग करने का समर्थन नहीं करता है, इसलिए आपको इसके बजाय कमांड का उपयोग करना होगा। यहां वह जगह है जहां चीजें दिलचस्प होती हैं:

for f in *.zip;do unzip $f;done

ऊप्स! ऐसा लगता है कि यह काम नहीं किया।

इसके बजाय हमें $ एफ चर के चारों ओर डबल कोट्स का उपयोग करने की आवश्यकता होगी, जैसे:
इसके बजाय हमें $ एफ चर के चारों ओर डबल कोट्स का उपयोग करने की आवश्यकता होगी, जैसे:

for f in *.zip;do unzip '$f';done

अब जब भी कमांड लूप के माध्यम से जाता है, तो यह वास्तव में इस तरह की कमांड चलाने जा रहा है:

unzip 'test 1.zip'

निस्संदेह यह निर्देशिका में प्रत्येक फ़ाइल के लिए एक समान कमांड के माध्यम से लूप होगा और चलाएगा।

पिछली समीक्षा

अब जब हम उदाहरणों के माध्यम से चले गए हैं, तो हम इसे याद करते समय तुरंत समीक्षा करेंगे:

डबल उद्धरण

  • जब आप चर को घेरना चाहते हैं या स्ट्रिंग के अंदर खोल विस्तार का उपयोग करना चाहते हैं तो इसका उपयोग करें।
  • भीतर के सभी पात्रों को $ या 'को छोड़कर नियमित वर्णों के रूप में व्याख्या किया जाता है जिसे खोल पर विस्तारित किया जाएगा।

एकल कोट

एकल उद्धरणों के भीतर सभी वर्णों को एक स्ट्रिंग वर्ण के रूप में व्याख्या किया जाता है।

और इस प्रकार उद्धरण के सबक समाप्त होता है। बुद्धिमानी से उनका प्रयोग करें।

सिफारिश की: