बैकटिक्स के बीच पाठ को निष्पादित किया जाता है और कमांड के आउटपुट द्वारा प्रतिस्थापित किया जाता है (शून्य से अनुगामी न्यूलाइन वर्ण, और सावधान रहें कि शेल व्यवहार तब भिन्न होता है जब आउटपुट में एनयूएल वर्ण होते हैं)। इसे कमांड प्रतिस्थापन कहा जाता है क्योंकि इसे कमांड के आउटपुट के साथ प्रतिस्थापित किया जाता है। इसलिए यदि आप 5 प्रिंट करना चाहते हैं, तो आप बैकटिक्स का उपयोग नहीं कर सकते हैं, आप उद्धरण चिह्नों का उपयोग कर सकते हैं, जैसे echo "$b"
किसी भी उद्धरण को छोड़ सकते हैं और उपयोग कर सकते हैं echo $b
।
जैसा कि आप देख सकते हैं, चूंकि $b
5 में शामिल है, जब बैकटिक्स bash
का उपयोग कमांड चलाने की कोशिश कर रहा है 5
और चूंकि ऐसी कोई कमांड नहीं है, तो यह त्रुटि संदेश के साथ विफल हो जाता है।
यह समझने के लिए कि बैकटिक्स कैसे काम करता है, इसे चलाने का प्रयास करें:
$ A=`cat /etc/passwd | head -n1`
$ echo "$A"
cat /etc/passwd |head -n1
/etc/passwd
फ़ाइल की पहली पंक्ति को प्रिंट करना चाहिए । लेकिन जब से हम backticks का उपयोग करते हैं, यह कंसोल पर प्रिंट नहीं करता है। इसके बजाय यह A
चर में संग्रहीत किया जाता है । आप इसे प्रतिध्वनित कर सकते हैं $A
। ध्यान दें कि पहली पंक्ति को प्रिंट करने का अधिक कुशल तरीका कमांड का उपयोग कर head -n1 /etc/passwd
रहा है, लेकिन मैं यह बताना चाहता था कि बैकटिक्स के अंदर की अभिव्यक्ति सरल नहीं है।
इसलिए यदि / etc / passwd की पहली लाइन है root:x:0:0:root:/root:/bin/bash
, तो पहले कमांड को bash द्वारा डायनामिक रूप से प्रतिस्थापित किया जाएगा A="root:x:0:0:root:/root:/bin/bash"
।
ध्यान दें कि यह सिंटेक्स बॉर्न शेल का है। उद्धृत करना और भागना जल्दी से एक बुरा सपना बन जाता है विशेष रूप से जब आप उन्हें घोंसले के शिकार शुरू करते हैं। Ksh ने $(...)
विकल्प पेश किया जो अब मानकीकृत ( POSIX ) है और सभी गोले (यहां तक कि यूनिक्स 9 से बॉर्न शेल) द्वारा समर्थित है। इसलिए आपको $(...)
आजकल के बजाय का उपयोग करना चाहिए जब तक कि आपको बहुत पुराने बॉर्न शेल के लिए पोर्टेबल होने की आवश्यकता न हो।
यह भी ध्यान रखें कि के उत्पादन `...`
और $(...)
शब्द बंटवारे और बस (केवल zsh में, शब्द बंटवारे) चर विस्तार की तरह फ़ाइल नाम पीढ़ी के अधीन हैं, तो आम तौर पर सूची संदर्भों में उद्धृत किया जाना आवश्यक होगा।