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

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

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

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

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

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

mkdir "Test Directory"
mkdir 'Test Directory'

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

शैल चर विस्तार

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

test="This is a test"

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

echo $test

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

echo '$test'

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

छवि

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

echo `pwd`/test

यदि आप अपने होम फोल्डर में थे तो आपको ऐसा आउटपुट दिखाई देता है जो इस तरह दिखता है:

/ घर / गीक / परीक्षण

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

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

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

छवि

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

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

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

छवि

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

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

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

छवि

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

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

अब हर बार कमांड के लिए लूप से गुजरने के बाद, यह वास्तव में इस तरह से एक कमांड चलाने वाला है:

unzip "test 1.zip"

बेशक यह निर्देशिका में हर फ़ाइल के लिए एक समान कमांड चलाएगा।

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

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

डबल उद्धरण

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

एकल कोट

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

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