man bash यह एकल उद्धरण के बारे में देता है
एकल उद्धरणों में वर्णों को संलग्न करना प्रत्येक वर्ण के शाब्दिक मूल्य को उद्धरणों के भीतर संरक्षित करता है। एकल उद्धरण के बीच एक एकल उद्धरण नहीं हो सकता है, तब भी जब एक बैकस्लैश द्वारा पूर्ववर्ती हो।
जो भी आप कमांड लाइन पर टाइप करते हैं, बैश इसे व्याख्या करता है और फिर यह उस प्रोग्राम को परिणाम भेजता है जिसे इसे भेजा जाना चाहिए। इस मामले में, यदि आप उपयोग करते हैं sed 's/$old_run/$new_run/', तो bash सबसे पहले sedइसे देखता है , इसे $PATHवैरिएबल में मौजूद एक निष्पादन योग्य के रूप में पहचानता है । sedनिष्पादन एक इनपुट की आवश्यकता है। बैश इनपुट ढूंढता है और पाता है 's/$old_run/$new_run/'। सिंगल कोट्स का कहना है कि उनमें मौजूद कंटेंट की व्याख्या न करें और उन्हें वैसे ही पास करें। तो, बैश तो उन्हें sed करने के लिए गुजरता है। सेड एक त्रुटि देता है क्योंकि $केवल पंक्ति के अंत में हो सकता है।
इसके बजाय अगर हम दोहरे उद्धरण चिह्नों का उपयोग करते हैं, यानी, "s/$old_run/$new_run/"तो बैश इसे देखता है और $old_runएक चर नाम के रूप में व्याख्या करता है और एक प्रतिस्थापन बनाता है (इस चरण को चर विस्तार कहा जाता है)। यह वास्तव में हम क्या आवश्यकता है।
लेकिन, आपको दोहरे उद्धरण चिह्नों का उपयोग करके सावधान रहना होगा क्योंकि, उन्हें पहले बैश द्वारा व्याख्या किया जाता है और फिर sed को दिया जाता है। तो, कुछ प्रतीक जैसे `का उपयोग करने से पहले बच जाना चाहिए।