बैश शेल में सिंगल और डबल कोट्स के बीच अंतर क्या है?
उद्धरण चिह्नों में पाठ संलग्न करना कमांड लाइन पर काफी मानक अभ्यास है, खासकर जब फ़ाइलों के साथ काम करते हैं जिनके नाम में रिक्त स्थान होते हैं, लेकिन आप कैसे जानते हैं कि एकल या दोहरे उद्धरण चिह्नों का उपयोग करना है? चलो अंतर पर एक नज़र डालें, और जब आपको एक बनाम दूसरे का उपयोग करना चाहिए.
सामान्य नियम यह है कि दोहरे उद्धरण चिह्नों के भीतर अभी भी चर के विस्तार की अनुमति देते हैं, और एकल उद्धरण नहीं करते हैं। पढ़ते रहिये.
सरल पाठ के साथ उद्धरण
यदि आप बस पाठ के कुछ शब्दों को संलग्न कर रहे हैं, तो यह वास्तव में कोई फर्क नहीं पड़ता कि आप किसका उपयोग करते हैं, क्योंकि वे दोनों बिल्कुल समान काम करेंगे। उदाहरण के लिए, ये दोनों कमांड टेस्ट डायरेक्टरी नामक एक निर्देशिका बनाएंगे:
mkdir "टेस्ट डायरेक्टरी"
mkdir 'टेस्ट डायरेक्टरी'
अधिक अनुभवी प्रकार संभवतः ध्यान देंगे कि यदि आप चाहते हैं तो आप mkdir Test \ Directory का उपयोग भी कर सकते हैं.
शैल चर विस्तार
जब आप कमांड लाइन-बाय डिफॉल्ट पर वेरिएबल्स के साथ काम कर रहे होते हैं, तब सिंगल और डबल कोट्स के बीच का अंतर और अधिक महत्वपूर्ण हो जाता है, बैश पूरे स्ट्रिंग में $ टेस्ट जैसे वेरिएबल का विस्तार करने वाला है। सबसे पहले, हम चर को असाइन करेंगे:
परीक्षण = "यह एक परीक्षा है"
अब आप इस वैरिएबल का उपयोग कमांड लाइन पर कर सकते हैं, इस तरह, जो बस आउटपुट होना चाहिए यह एक परीक्षण है कंसोल के लिए:
इको $ टेस्ट
यहां पर दोहरे और एकल उद्धरणों के बीच अंतर अधिक स्पष्ट हो जाता है-जब आप एकल उद्धरणों का उपयोग करते हैं तो चर का विस्तार नहीं होने वाला है। उदाहरण के लिए, यदि आप यह कमांड चलाते हैं:
गूंज '$ परीक्षण'
जब आप सिंगल कोट्स का उपयोग करते हैं तो कमांड लाइन पर आपको '$ परीक्षण' के अलावा कुछ भी नहीं दिखाई देगा, लेकिन जब आप दोहरे उद्धरण चिह्नों का उपयोग करते हैं तो यह ठीक से आउटपुट होगा:
जब आप कमांड लाइन पर एक कमांड का विस्तार करने के लिए 'वर्ण का उपयोग करते हैं तो वही काम करता है। उदाहरण के लिए, मान लें कि आप उपयोग करना चाहते हैं लोक निर्माण विभाग एक और कमांड के भीतर से कमांड-आप इसका विस्तार करने के लिए शेल को बताने के लिए बैकटिक्स का उपयोग करेंगे:
इको p पीडीडब्ल्यू ’/ परीक्षण
यदि आप अपने होम फोल्डर में थे, तो आपको आउटपुट दिखाई देगा जो इस तरह दिखता था:
/ घर / गीक / परीक्षण
उदाहरण के लिए, उदाहरण के लिए, आप उस फ़ोल्डर में हैं जिसमें पथ में एक स्थान है, और आप मौजूदा निर्देशिका में एक फ़ाइल का प्रतीकात्मक लिंक बनाने के लिए ln कमांड का उपयोग करना चाहते हैं। आपको आमतौर पर ln कमांड का उपयोग करते समय पूर्ण पथ को निर्दिष्ट करने की आवश्यकता होती है, इसलिए टाइपिंग को बचाने के लिए 'pwd' का उपयोग करना बहुत आसान है.
देखो जब आप कोशिश करते हैं और उद्धरणों में संलग्न किए बिना कमांड का उपयोग करते हैं तो क्या होता है:
ln -s 'pwd' / test / home / geek / लिंक्डइन
इसके बजाय, आपको उद्धरणों में घेरना होगा:
ln -s "'pwd' / फ़ाइल नाम" / कुछ / अन्य / पथ
अधिक ठोस उदाहरण के लिए, मान लें कि हमारे पास इस उदाहरण की तरह एक फ़ोल्डर संरचना है, जहां सभी फ़ाइल नामों में रिक्त स्थान हैं:
चूंकि अनज़िप कमांड सभी फ़ाइलों के विरुद्ध इसे चलाने के लिए * का उपयोग करने का समर्थन नहीं करता है, इसलिए आपको इसके लिए कमांड का उपयोग करने की आवश्यकता होगी। यहां चीजें दिलचस्प हैं:
f में *। zip; के लिए unzip $ f; किया
ऊप्स! ऐसा लगता है कि यह काम नहीं किया.
इसके बजाय हमें $ f चर के आसपास दोहरे उद्धरण चिह्नों का उपयोग करने की आवश्यकता होगी, जैसे:
f में * .zip; के लिए unzip "$ f" करें; किया
अब हर बार कमांड के लिए लूप से गुजरने के बाद, यह वास्तव में इस तरह से एक कमांड चलाने वाला है:
अनज़िप "टेस्ट 1.ज़िप"
बेशक यह निर्देशिका में हर फ़ाइल के लिए एक समान कमांड चलाएगा.
पिछली समीक्षा
अब जब हम उदाहरणों के माध्यम से चले गए हैं, तो आपके द्वारा चूक जाने पर हम केवल शीघ्रता से समीक्षा करेंगे:
डबल उद्धरण
- जब आप चर को घेरना चाहते हैं या स्ट्रिंग के अंदर शेल विस्तार का उपयोग करना चाहते हैं, का उपयोग करें.
- सभी वर्णों को $ या 'को छोड़कर नियमित वर्णों के रूप में व्याख्या की जाती है जिसे शेल पर विस्तारित किया जाएगा.
एकल कोट
- एकल उद्धरण के भीतर सभी वर्णों को एक स्ट्रिंग चरित्र के रूप में व्याख्या की जाती है.
और इस प्रकार उद्धरणों का पाठ समाप्त होता है। इनका बुद्धिमानी से उपयोग करें.