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


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.