मेरे पास यह बहु-पंक्ति स्ट्रिंग (उद्धरण शामिल हैं):
abc'asdf"
$(dont-execute-this)
foo"bar"''
मैं बैश में एक हेरेडोक का उपयोग करके इसे एक चर को कैसे निर्दिष्ट करूंगा?
मुझे नई कहानियों को संरक्षित करने की जरूरत है।
मैं स्ट्रिंग में पात्रों से बचना नहीं चाहता, जो कष्टप्रद होगा ...
"EOF"
वैरिएबल में, यदि कहा जाता है, तो eval $VAR
शेष सभी स्क्रिप्ट को टिप्पणी करने का कारण होगा, क्योंकि यहां $ VAR को एक एकल पंक्ति के रूप में देखा जाएगा। ; #
मल्टीलाइन स्क्रिप्ट में बैश टिप्पणियों का उपयोग करने में सक्षम होने के लिए , eval call:
"$ VAR" ` में डबल-उद्धरण भी परिवर्तनशील है ।
eval
इस तरीकों से समस्या थी , लेकिन इसे नीचे ट्रैक नहीं किया क्योंकि यह कुछ पैकेज का हिस्सा था, जो eval
कि कॉन्फ़िगर फ़ाइल में परिभाषित कुछ चर है। त्रुटि संदेश था: /usr/lib/network/network: eval: line 153: syntax error: unexpected end of file
। मैं बस एक और समाधान के लिए बंद कर दिया।
'EOF'
,` in the content: if the second line has
cd` कमांड के साथ बची हुई लाइनब्रीक के साथ , मुझे वापस मिलता है: " .sh: लाइन एक्स: सीडी: कमांड नहीं मिला "; लेकिन अगर मैं दोहरे उद्धरण"EOF"
; तो बैश चर${A}
(वे विस्तारित किए जाते हैं) तार के रूप में संरक्षित नहीं मिलता; लेकिन फिर, लाइन-ब्रेक को संरक्षित किया जाता है - और, मुझेcd
दूसरी पंक्ति में ( और 'ईओएफ' और "ईओएफ" दोनों केeval
साथ कमांड चलाने में कोई समस्या नहीं है , इसमें संग्रहीत आदेशों का एक सेट चलाने के लिए भी अच्छा लगता है) एक स्ट्रिंग चर )। चीयर्स!