यह सवाल है नहीं कैसे एक सही तरीके से छोड़े स्ट्रिंग शाब्दिक लिखने के बारे में। मुझे कोई भी संबंधित प्रश्न नहीं मिल रहा है कि स्क्रिप्ट के भीतर या अन्य कार्यक्रमों द्वारा प्रत्यक्ष उपभोग के लिए चर से कैसे बचा जाए।
मेरा लक्ष्य एक स्क्रिप्ट को अन्य स्क्रिप्ट बनाने के लिए सक्षम करना है। ऐसा इसलिए है क्योंकि उत्पन्न स्क्रिप्ट में कार्य किसी अन्य मशीन पर 0 से n गुना तक कहीं भी चलेगा , और जिस डेटा से वे उत्पन्न हुए हैं, वे चलने से पहले बदल सकते हैं (फिर से), इसलिए ऑपरेशन सीधे कर रहे हैं, एक नेटवर्क पर काम नहीं।
एक ज्ञात चर को देखते हुए जिसमें विशेष वर्ण हो सकते हैं जैसे कि एकल उद्धरण, मुझे यह लिखना होगा कि पूरी तरह से बच गए स्ट्रिंग शाब्दिक के रूप में, उदाहरण के लिए एक चर foo
युक्त bar'baz
स्क्रिप्ट उत्पन्न स्क्रिप्ट में दिखाई देनी चाहिए:
qux='bar'\''baz'
जो "qux=$foo_esc"
स्क्रिप्ट की अन्य लाइनों के साथ जोड़कर लिखा जाएगा । मैंने इसे पर्ल का उपयोग करके इस तरह किया:
foo_esc="'`perl -pe 's/('\'')/\\1\\\\\\1\\1/g' <<<"$foo"`'"
लेकिन यह ओवरकिल की तरह लगता है।
मुझे केवल बैश के साथ इसे करने में कोई सफलता नहीं मिली है। मैंने इनमें से कई रूपों की कोशिश की है:
foo_esc="'${file//\'/\'\\\'\'}'"
foo_esc="'${file//\'/'\\''}'"
लेकिन या तो अतिरिक्त स्लैश आउटपुट में दिखाई देते हैं (जब मैं करता हूं echo "$foo"
), या वे एक सिंटैक्स त्रुटि का कारण बनता है (शेल से किया गया है तो आगे इनपुट की उम्मीद करना)।
alias "varname=$varname" varname
याvar=value set
alias
और / याset
काफी सार्वभौमिक रूप से