2012-04-01 21 views
8

मान्य है, मैं एक बैश neophyte हूँ। मैं हमेशा अपने खोल स्क्रिप्टिंग उद्देश्यों के लिए पायथन के लिए पहुंचना चाहता हूं। हालांकि, मैं कुछ बाश सीखने के लिए खुद को धक्का देने की कोशिश कर रहा हूं। मैं उत्सुक हूं कि निम्न कोड क्यों काम नहीं करता है।इनलाइन बैश स्क्रिप्ट चर

sh -c "F=\"123\"; echo $F" 

उत्तर

13

यह काम नहीं करता है क्योंकि डबल-कोटेड स्ट्रिंग में चर विस्तार होता है से पहले आदेश कहा जाता है। वास्तव में गूंज आदेश कॉल करने से पहले

echo "/home/lars" 

:

echo "$HOME" 

खोल में इस बदल देती है: यह है कि अगर मैं टाइप करता है। इसी तरह, अगर आप टाइप करें:

sh -c "F=\"123\"; echo $F" 

इस रूप में तब्दील हो जाता है: एक sh आदेश कॉल करने से पहले

sh -c "F=\"123\"; echo" 

। आप एकल उद्धरण चिह्नों का उपयोग चर विस्तार बाधित करने के लिए, उदाहरण के लिए कर सकते हैं:

sh -c 'F="123"; echo $F' 

तुम भी एक बैकस्लैश के साथ $ बच सकते हैं: इसके अलावा

sh -c "F=\"123\"; echo \$F" 
+0

, यदि आप 'bash' जानने की कोशिश कर रहे हैं, खर्च 'बाश' मैन पेज के साथ कुछ गुणवत्ता का समय, और [#bash faq] (http://mywiki.wooledge.org/BashFAQ)। – larsks

+0

इसके अलावा, ध्यान दें कि सिंगल-उद्धृत स्टिंग में बैकस्लैश-उद्धरण से बचने के लिए जरूरी नहीं था: '' F = \ "123 \" ''' के बजाय 'एफ =" 123 "''। – larsks

+0

धन्यवाद! पूरी समझ में आता है। यह थोड़ा सा विवरण है जो एक बड़ा अंतर बनाता है। :-) – Daniel

संबंधित मुद्दे