किसी स्क्रिप्ट में $ "डॉलर-पूर्व-उपसर्ग स्ट्रिंग" होने का क्या मतलब है?


81

मैंने इसे एक init स्क्रिप्ट में देखा:

echo $"Stopping Apache"

वह डॉलर-चिन्ह किसके लिए है?

मेरा अब तक का शोध:

मुझे यह बाश मैनुअल में मिला:

extquote

यदि सेट किया जाता है, $'string'और उद्धरण दोहरे उद्धरणों में संलग्न विस्तार के $"string"भीतर किया जाता है ${parameter}। यह विकल्प डिफॉल्ट द्वारा सक्षम हो जाता है।

... लेकिन मैं $उपसर्ग के साथ और उसके बिना तार के बीच कोई अंतर नहीं पा रहा हूँ :

$ echo "I am in $PWD"
I am in /var/shared/home/southworth/qed
$ echo $"I am in $PWD"
I am in /var/shared/home/southworth/qed
$ echo $"I am in ${PWD}"
I am in /var/shared/home/southworth/qed
$ echo "I am in ${PWD}"
I am in /var/shared/home/southworth/qed
$ echo 'I am in ${PWD}'
I am in ${PWD}
$ echo $'I am in ${PWD}'
I am in ${PWD}
$ echo $'I am in $PWD'
I am in $PWD

जवाबों:


111

यहां दो अलग-अलग चीजें चल रही हैं, दोनों bashमैनुअल में प्रलेखित हैं

$ '

डॉलर-चिह्न एकल उद्धरण उद्धृत करने का एक विशेष रूप है:

ANSI C कोटिंग

फॉर्म $ 'स्ट्रिंग' के शब्दों को विशेष रूप से व्यवहार किया जाता है। यह शब्द ANSI C मानक द्वारा निर्दिष्ट बैकस्लैश-एस्कैप्ड वर्णों के साथ स्ट्रिंग में फैलता है।

$ "

डॉलर-चिन्ह डबल-कोट स्थानीयकरण के लिए है:

स्थानीय अनुवाद

डॉलर चिह्न ('$') से पहले एक डबल-उद्धृत स्ट्रिंग वर्तमान स्थानीय के अनुसार स्ट्रिंग का अनुवाद करने का कारण होगा। यदि वर्तमान स्थान C या POSIX है, तो डॉलर चिह्न को अनदेखा कर दिया जाता है। यदि स्ट्रिंग का अनुवाद और प्रतिस्थापित किया जाता है, तो प्रतिस्थापन डबल-उद्धृत होता है।


22

जब एक स्ट्रिंग के अंदर विस्तार किया जाता है $'', तो भागने के दृश्यों की व्याख्या की जाती है। मैनपेज से:

Words of the form $'string' are treated specially. The word expands to
string, with backslash-escaped characters replaced as specified by  the
ANSI  C  standard.

एक आसान उदाहरण एक newline के लिए \ n एस्केप अनुक्रम है:

$ echo 'foo\n'
foo\n
$ echo $'foo\n'
foo

$ 

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


8
$"..."प्रश्न के अनुसार इसका कोई उल्लेख नहीं है ।
पीटर।

-4

आप मैनुअल की गलत व्याख्या कर रहे हैं। आपको केवल एक प्रभाव दिखाई देगा जब एक $ -quoted स्ट्रिंग विस्तार के अंदर है ${parameter}

$ echo "${v:-'ab\ncd'}"
'ab\ncd'
$ echo "${v:-$'ab\ncd'}"
ab
cd

स्रोत और आगे पढ़ने: https://lists.gnu.org/archive/html/bug-bash/2005-10/msg_0101.html


6
यह सवाल का जवाब नहीं देता: $"…"कुछ अलग है।
गाइल्स

4
क्षमा करें, लेकिन आपका उत्तर गलत है: ${}एएनएसआई को उद्धृत करने के लिए विस्तार का उपयोग करने की आवश्यकता नहीं है । खुद के लिए जाँच करें:echo $'ab\ncd'
rozcietrzewiacz

1
मुझे लगता है कि यह उत्तर extquoteप्रश्न पूछने के बजाय गलत तरीके से समझाने की कोशिश कर रहा था।
jw013

1
"${...}" से अलग है $"..."
जिप्सीकोस्मोनॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.