repo
आदेश की परवाह नहीं कर सकते हैं उद्धरण किस तरह यह हो जाता है। यदि आपको पैरामीटर विस्तार की आवश्यकता है, तो दोहरे उद्धरण चिह्नों का उपयोग करें। यदि इसका मतलब है कि आप बहुत सारे सामान को बैकस्लैश कर रहे हैं, तो इसमें से अधिकांश के लिए सिंगल कोट्स का उपयोग करें, और फिर उनमें से तोड़कर उस हिस्से के लिए डबल्स में जाएं जहां आपको विस्तार की आवश्यकता है।
repo forall -c 'literal stuff goes here; '"stuff with $parameters here"' more literal stuff'
यदि आप रुचि रखते हैं, तो स्पष्टीकरण इस प्रकार है।
जब आप शेल से एक कमांड चलाते हैं, तो उस कमांड को तर्कों के रूप में प्राप्त होता है, जो शून्य-समाप्त स्ट्रिंग्स की एक सरणी है। उन तार पूरी तरह से हो सकती है किसी भी गैर-शून्य चरित्र।
लेकिन जब शेल कमांड लाइन से तार के उस सरणी का निर्माण कर रहा होता है, तो यह कुछ पात्रों की विशेष रूप से व्याख्या करता है; यह कमांड को आसान (वास्तव में, संभव) टाइप करने के लिए बनाया गया है। उदाहरण के लिए, रिक्त स्थान सामान्य रूप से सरणी में तारों के बीच की सीमा को इंगित करते हैं; उस कारण से, व्यक्तिगत तर्कों को कभी-कभी "शब्द" कहा जाता है। लेकिन फिर भी एक तर्क में इसमें जगह हो सकती है; आपको केवल शेल को बताने के लिए किसी तरह की आवश्यकता है जो आप चाहते हैं।
आप किसी अक्षर के सामने एक बैकस्लैश का उपयोग कर सकते हैं (अंतरिक्ष, या किसी अन्य बैकस्लैश सहित), इस अक्षर को अक्षरशः व्यवहार करने के लिए शेल को बताने के लिए। लेकिन जब आप ऐसा कुछ कर सकते हैं:
echo \"Thank\ you.\ \ That\'ll\ be\ \$4.96,\ please,\"\ said\ the\ cashier
... यह थकाऊ हो सकता है। तो शेल एक विकल्प प्रदान करता है: उद्धरण चिह्न। ये दो मुख्य किस्मों में आते हैं।
दोहरे उद्धरण चिह्नों को "समूहीकरण उद्धरण" कहा जाता है। वे वाइल्डकार्ड और उपनामों को विस्तारित होने से रोकते हैं, लेकिन ज्यादातर वे एक शब्द में रिक्त स्थान शामिल करने के लिए होते हैं। अन्य चीजें जैसे पैरामीटर और कमांड एक्सपेंशन (ए द्वारा संकेतित वस्तु का प्रकार $
) अभी भी होता है। और यदि आप डबल-कोट्स के अंदर शाब्दिक डबल-उद्धरण चाहते हैं, तो आपको इसे वापस करना होगा:
echo "\"Thank you. That'll be \$4.96, please,\" said the cashier"
एकल-उद्धरण चिह्न अधिक ड्रैकियन हैं। उनके बीच सब कुछ पूरी तरह से शाब्दिक रूप से लिया जाता है, जिसमें बैकस्लैश भी शामिल है। एकल उद्धरणों के अंदर शाब्दिक एकल उद्धरण प्राप्त करने का कोई तरीका नहीं है।
सौभाग्य से, खोल में उद्धरण चिह्न शब्द सीमांकक नहीं हैं ; अपने आप से, वे एक शब्द को समाप्त नहीं करते हैं। आप वांछित परिणाम प्राप्त करने के लिए एक ही शब्द के भीतर उद्धरणों के विभिन्न प्रकारों सहित, अंदर और बाहर जा सकते हैं:
echo '"Thank you. That'\''ll be $4.96, please," said the cashier'
तो यह आसान है - बहुत कम बैकस्लैश, हालांकि क्लोज-सिंगल-कोट, बैकस्लेशेड-शाब्दिक-सिंगल-कोट, ओपन-सिंगल-क्वैस सीक्वेंस में कुछ आदतें लग जाती हैं।
आधुनिक गोले ने एक और उद्धरण शैली जोड़ दी है जो पोसिक्स मानक द्वारा निर्दिष्ट नहीं है, जिसमें अग्रणी एकल उद्धरण चिह्न एक डॉलर चिह्न के साथ उपसर्ग है। स्ट्रिंग को एएनएसआई सी प्रोग्रामिंग भाषा में स्ट्रिंग शाब्दिक के समान सम्मेलनों के रूप में उद्धृत किया जाता है, और इसलिए कभी-कभी "एएनएसआई स्ट्रिंग्स" और $'
... '
जोड़ी "एएनएसआई उद्धरण" कहा जाता है। इस तरह के तार के भीतर, बैकस्लैश के बारे में उपरोक्त सलाह का शाब्दिक अर्थ अब लागू नहीं होता है। इसके बजाय, वे फिर से विशेष हो जाते हैं - न केवल आप एक शाब्दिक उद्धरण उद्धरण या बैकस्लैश को इसमें शामिल कर सकते हैं, बल्कि शेल एएनएसआई सी अक्षर से बाहर निकलता है (जैसे \n
एक नई पंक्ति के लिए, \t
टैब के लिए, और \xHH
चरित्र के लिए) हेक्साडेसिमल कोडHH
)। अन्यथा, हालांकि, वे एकल-उद्धृत स्ट्रिंग्स के रूप में व्यवहार करते हैं: कोई पैरामीटर या कमांड प्रतिस्थापन नहीं होता है:
echo $'"Thank you. That\'ll be $4.96, please," said the cashier'
ध्यान देने वाली महत्वपूर्ण बात यह है कि echo
कमांड के तर्क के रूप में प्राप्त एकल स्ट्रिंग इन सभी उदाहरणों में बिल्कुल समान है। शेल को एक कमांड लाइन पार्स करने के बाद, कमांड को चलाने के लिए कोई रास्ता नहीं है यह बताने के लिए कि कैसे उद्धृत किया गया था। चाहने पर भी।
repo forall -c ' ...before... '"$variable"' ...after...'