डबलक्वाट्स "", सिंगलक्वाट्स 'और बैकटिक्स `` कमांडलाइन पर अंतर?


43

मैं अक्सर इस साइट पर वेब या पोस्ट पर ट्यूटोरियल देखता हूं जो कमांड लाइन पर निम्न वर्णों का भारी उपयोग करते हैं। अक्सर ऐसा लगता है कि वे सुंदर समान उद्देश्यों के लिए उपयोग किए जाते हैं। कमांड लाइन पर या शेल प्रोग्रामिंग के लिए उपयोग किए जाने पर उनके बीच क्या अंतर हैं? किस उद्देश्य के लिए मैं उनमें से किसका उपयोग करता हूं?

" " double quotes

' ' single quotes

` ` backticks

जवाबों:


43

उदाहरण के लिए, विचार करें कि चर fooमें uname( foo=uname) है।

  • echo "$foo"आउटपुट uname, पाठ में चर का प्रतिस्थापन।
    • उद्धरण के $अंदर एक शाब्दिक चरित्र के लिए ", उपयोग करें \$; एक शाब्दिक के लिए ", का उपयोग करें \"
  • echo '$foo'आउटपुट $foo, सटीक स्ट्रिंग।
    • यहां तक ​​कि अंदर के उद्धरणों के 'रूप में भी नहीं बचा जा सकता है । लेकिन आप उपयोग कर सकते हैं ।\'''foo'\''bar'
  • echo `$foo`आउटपुट Linux, चर की सामग्री को निष्पादित करना और उसे echoप्रिंट करना।

\हमेशा एकल उद्धरण में संलग्न होने पर शाब्दिक रूप से व्यवहार किया जाता है, भले ही यह पहले से हो '। एक उद्घाटन के बाद ', अगले 'को हमेशा समापन उद्धरण के रूप में व्याख्या की जाती है। 'एकल-उद्धृत स्ट्रिंग में उद्धृत करने, 'व्यक्तिगत रूप से भागने , और फिर से उद्धृत करना शुरू करने से कुछ हासिल किया जा सकता है । यही है, जबकि पात्रों को \'खोलने और बंद करने के बीच काम नहीं करता है ', '\''करता है। ( मेरे एक पोस्ट पर गिल्स का सुधार देखें जब मैंने विवरण के लिए एक ही गलती की होगी ।)
एलिया कगन

11

यह बाश मैनुअल के संबंधित अनुभाग में बहुत अच्छी तरह से समझाया गया है । संक्षेप में, एकल उद्धरणों के भीतर किसी भी चीज की शाब्दिक व्याख्या की जाती है। इसलिए, उदाहरण के लिए:

$ echo '$SHELL'
$SHELL
$ echo '{1..3}'
{1..3}

इसकी तुलना अनकोटूट किए गए संस्करणों से करें:

$ echo $SHELL
/bin/bash
$ echo {1..3}
1 2 3

दोहरे उद्धरण परिवर्तनशील विस्तार की अनुमति देते हैं (इतिहास विस्तार और कुछ अन्य चीजें भी)। मूल रूप से, आप उनका उपयोग तब करते हैं जब आप किसी ऐसी चीज से निपट रहे होते हैं जिसे आप विस्तारित देखना चाहते हैं। उदाहरण के लिए:

$ echo "$SHELL"
/bin/bash
$ echo "!!"
echo "echo "$SHELL""
echo /bin/bash

दूसरे शब्दों में, एकल उद्धरण पूरी तरह से शेल से एक स्ट्रिंग की रक्षा करते हैं जबकि दोहरे उद्धरण कुछ चीजों (उदाहरण के लिए रिक्त स्थान) की रक्षा करते हैं, लेकिन चर और विशेष वर्णों को सही ढंग से विस्तारित / व्याख्या करने की अनुमति देते हैं।


1
इस तथ्य के बाद यदि ओपी को बदल दिया गया था, तो निश्चित नहीं है, लेकिन इस उत्तर में बैकटिक्स का उल्लेख नहीं है?
अलेक्जेंडर मिल्स

5

एकल उद्धरण ( '') का उपयोग उद्धरणों के भीतर संलग्न प्रत्येक वर्ण के शाब्दिक मूल्य को संरक्षित करने के लिए किया जाता है।

दोहरे उद्धरण चिह्नों ( "") का उपयोग करके , संलग्न सभी वर्णों के शाब्दिक मूल्य को संरक्षित किया गया है, सिवाय डॉलर के संकेत ( $), बैकटिक्स (बैकवर्ड सिंगल कोट्स ``) और बैकस्लैश ( \) के।

जब बैक-टिक्स ( ``) के अंदर संलग्न किया जाता है , तो शेल का अर्थ होता है "बैक-टिक्स के अंदर कमांड का आउटपुट।" इसे "कमांड प्रतिस्थापन" के रूप में संदर्भित किया जाता है, क्योंकि कमांड के आउटपुट को कमांड के लिए ही प्रतिस्थापित किया जाता है।

संदर्भ:


3
echo '$HOME' is "$HOME"

एकल उद्धरण चर विस्तार को रोकते हैं, जबकि दोहरे उद्धरण इसे अनुमति देते हैं।


2

आम तौर पर बात कर रहा हूँ लेकिन:

""- आउटपुट से पहले उनके अंदर कुछ जानकारी संसाधित करने के लिए उपयोग किया जाता है। (PHP की तरह।)

  • उदाहरण के लिए: name=NESS; echo "Hello my name is $name"आउटपुट:Hello my name is NESS

''- आउटपुट को दिखाने के लिए इसका उपयोग किया जाता है। (PHP में भी)

  • ऊपर दिए गए उदाहरण का उपयोग करते हुए, यह आउटपुट करेगा Hello my name is $name

इसलिए डबल और सिंगल कोट्स के बीच का अंतर यह है कि डबल कोट्स वेरिएबल को प्रोसेस करते हैं और वैल्यू दिखाते हैं, जबकि सिंगल कोट्स बिना प्रोसेसिंग के वेरिएबल का नाम दिखाते हैं।

`` - बाद में किसी अन्य चर को असाइन किए गए आदेशों को उद्धृत करने के लिए उपयोग किया जाता है।


1

एकल उद्धरण एक मूल्य संलग्न करते हैं जिसे सचमुच लिया जाना है: सभी प्रकार के विस्तार को दबा दिया जाता है। आमतौर पर उपयोग किया जाता है यदि मूल्य शामिल है या इसमें सफेद स्थान (स्पेस, टैब, नई-लाइन), या विशेष वर्ण ( , ) शामिल हो सकते हैं $, जो उपयोगकर्ता शेल द्वारा विशेष रूप से विस्तारित / इलाज नहीं करना चाहता है। \`

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

वापस उद्धरण एक आदेश संलग्न करते हैं, जिसके परिणाम मूल्य के रूप में चाहते हैं। नए गोले के $(...)स्थान पर उपयोग की अनुमति देते हैं `...`। मैं नई विधि पसंद करता हूं।

निम्नलिखित कोड यह समझने में मदद कर सकता है कि क्या हो रहा है।

CMD = 'ls।'
गूंज वर्ग: $ CMD
$ CMD सेट करें
इको रॉ 1: $ 1
प्रतिध्वनी कच्ची: $ *
"$ CMD" सेट करें
गूंज dq: $ 1
प्रतिध्वनि bq: `$ CMD`
गूंज नई: $ ($ CMD)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.