बैश में एकल उद्धृत $ 'स्ट्रिंग' और डबल उद्धृत $ "स्ट्रिंग" के बीच क्या अंतर है?


9

मैं echoदो आदेशों का उपयोग करके नई लाइन निष्पादित करने का प्रयास कर रहा था :

  1. पहला आदेश:

    echo $'Hello World\nThis is a new line'

    उत्तर:

    Hello World
    This is a new line
  2. दूसरा आदेश:

    echo $"Hello World\nThis is a new line"

    उत्तर:

    Hello World\nThis is a new line

मेरा प्रश्न क्या साथ लिपटे स्ट्रिंग के बीच का अंतर है $' 'स्ट्रिंग बनाम साथ लिपटे $" "में bashकी echo?


सहायक नोट: दोहरे उद्धरण को कमजोर उद्धरण के रूप में भी जाना जाता है और एकल उद्धरण को मजबूत उद्धरण के रूप में भी जाना जाता है।
रफाफ तहसीन

2
हाँ, पर "weak quote"और 'strong quote'से अलग हैं $'C String'और $"I18N String"
डोपघोटी

आप असली एम.वी.पी. : D >>> @DopeGhoti
रफाफ तहसीन

मैं वह कर सकता हूं जो मैं कर सकता हूं: (:
डोपघोटी

जवाबों:


10

जैसा कि यहां बताया गया है , वाक्यविन्यास $'string'एक सी-स्टाइल स्ट्रिंग को निर्दिष्ट करता है जिसमें जादू से बच गए अक्षर शामिल होते हैं, जैसे कि \nएक नई पंक्ति के लिए। $"string"I18N विस्तार के लिए है, जिसमें ऐसा कोई जादू नहीं है।

ध्यान दें कि ये अधिक सामान्य "string"(कमजोर उद्धरण) और 'string'(मजबूत उद्धरण) से अलग हैं।


9

$में स्ट्रिंग की शुरुआत में:

echo $'Hello World\nThis is a new line'

कारण अनुक्रमों की व्याख्या की जा सकती है।

बैश संदर्भ मैनुअल [कहते हैं]

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

परंतु

echo $"Hello World\nThis is a new line"

पूरी तरह से अलग है। स्थानीय विशिष्ट अनुवाद पर यह [लेख] कहता है:

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


नोट: IIRC दोनों $'string'और $"string"विभिन्न गोले के बीच में समर्थन नहीं मिल सकता है। न केवल अन्य गोले के लोग उन्हें जिज्ञासा से देखते हैं, बल्कि वे इस पर भी बहस करते हैं कि क्या यह स्क्रिप्ट पोर्टेबिलिटी से बचा जा सकता है।


1
ksh93भी समझता है $'...'
Kusalananda

@ कुसलानंद: हम्म, गुड नोट :)
sjsam

4
$'xxx'बशीवाद नहीं है, लेकिन पहली बार kshकई साल पहले शुरू किया गया bashथा। यह वर्तमान में भी समर्थित है zshऔर busybox shPOSIX मानक द्वारा समीक्षा के अधीन है।
जुलियाग्रे

@ जल्लीगर: समय की सराहना करें :)। मैं सही हूं ..
sjsam
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.