2010-10-13 14 views
16

में एक अनपेक्षित डॉलर साइन युक्त एक चर को प्रतिबिंबित करने के लिए कैसे करें यदि मेरे पास एक अनचाहे डॉलर चिह्न वाला एक चर है, तो क्या कोई तरीका है कि मैं चर की संपूर्ण सामग्री को प्रतिबिंबित कर सकता हूं?बैश

./script.sh "test1$test2"

और फिर इसे "छोटा" इतनी तरह हो जाता है अगर मैं पैरामीटर का उपयोग करना चाहते हैं:

echo ${1}
test1

पाठ्यक्रम एकल के

उदाहरण कुछ के लिए एक स्क्रिप्ट कॉल व्यवहार्य नाम उद्धृत करने से मदद नहीं मिलती है। मैं यह समझ नहीं सकता कि इसे कैसे उद्धृत किया जाए ताकि स्क्रिप्ट स्क्रिप्ट प्राप्त करने के बाद कम से कम डॉलर से साइन इन कर सकें।

उत्तर

7

स्क्रिप्ट चलाने से पहले चर बदल दिया गया है।

./script.sh 'test1$test2' 
+0

हां, ऐसा लगता है कि यह मामला है :) – Not22

+0

अन्य स्थितियां हैं, हालांकि वास्तव में अनजान डॉलर संकेतों के साथ चर है, जैसे कि जब मैं फ़ाइलों से डेटा पढ़ रहा हूं। मैं फिर इस स्क्रिप्ट के साथ अपनी स्क्रिप्ट को कॉल करना चाहता हूं, तो क्या यह पूरी फाइल को पढ़ने से पहले ही मेरा एकमात्र विकल्प है? – Not22

+1

फ़ाइलों से डेटा पढ़ना परिवर्तनीय प्रतिस्थापन नहीं करता है। –

28

समस्या यह है कि स्क्रिप्ट पहली जगह में "test1" प्राप्त करता है और यह संभवतः नहीं पता कर सकते एक खाली (अघोषित) चर के लिए एक संदर्भ था कि है।

./script.sh "test1\$test2" 

या इस तरह एकल उद्धरण का उपयोग ':

./script.sh 'test1$test2' 

किस मामले बैश कि पैरामीटर स्ट्रिंग से चर का विस्तार नहीं होगा आप इसे स्क्रिप्ट के गुजर, इस तरह से पहले $ से बचने के लिए है ।

0

जैसा कि इग्नासिओ ने आपको बताया था, चर बदल दिया गया है, इसलिए आपकी स्क्रिप्ट ./script.sh test1$0 और $1 के मान के रूप में प्राप्त होती है।

लेकिन इस मामले में आपने तर्क को पारित करने के लिए शाब्दिक उद्धरणों का उपयोग किया था, तो आप अपने echo "${1}" में "$1" को हमेशा उद्धृत करते हैं। यह एक अच्छा अभ्यास है।

+0

और ब्रेसिज़ * आवश्यक * नहीं हैं, क्योंकि यह एक साधारण प्रतिस्थापन है। –

+0

हाँ उन्हें जरूरत नहीं है। उनका उपयोग करना सिर्फ वैकल्पिक है। – Benoit

4

एकल उद्धरणों का उपयोग करके, $ जैसे मेटा वर्ण इसके शाब्दिक मूल्य को बनाए रखेंगे। यदि डबल कोट्स का उपयोग किया जाता है, तो परिवर्तनीय नाम इंटरपोलेट हो जाएंगे।