2013-07-12 8 views
49

में परिवर्तनीय इंटरपोलेशन यह शायद एक बहुत ही बुनियादी सवाल है लेकिन किसी कारण से मैं स्पष्ट दिख रहा हूं।शैल

मैं एक चर filepath=/tmp/name

बुलाया चर मुझे पता है कि मैं अपने खोल स्क्रिप्ट में इस $filepath

कर सकते हैं मैं कुछ इस तरह (वापस टिक करना है)

कर करने का प्रयास किया पर पहुँचने के लिए है
`tail -1 $filepath_newstap.sh` 

यह लाइन विफल हो जाती है, duuh! क्योंकि परिवर्तनीय को $filepath_newstap.sh

वे चर नाम से _newstap.sh कैसे जोड़ सकते हैं? कृपया ध्यान दें कि वापस टिक अभिव्यक्ति मूल्यांकन के लिए

उत्तर

102

उपयोग

"$filepath"_newstap.sh 

या

${filepath}_newstap.sh 

या

$filepath\_newstap.sh 

_ पहचानकर्ताओं में एक वैध चरित्र है। डॉट नहीं है, इसलिए खोल ने $filepath_newstap को इंटरपोल करने की कोशिश की।

आप एक अपरिभाषित चर संदर्भित करते समय त्रुटि के साथ खोल निकालने के लिए set -u का उपयोग कर सकते हैं।

+4

के साथ बैकटिक्स ('\' ') को भ्रमित कर रहे हैं, शायद' set -u 'का भी उल्लेख करें जो स्क्रिप्ट को निरस्त करने का कारण बनता है यदि आप एक अपरिभाषित चर का संदर्भ देते हैं। – tripleee

+0

@ ट्रिपली: अपडेटेड, धन्यवाद। – choroba

+0

'$ {}' और डबल कोट्स का उपयोग करने के बीच क्या अंतर है? क्या मुझे एक दूसरे को पसंद करना चाहिए? – user31389

10

चर नाम के आसपास घुंघराले ब्रेसिज़ उपयोग करना है:

`tail -1 ${filepath}_newstap.sh` 
+1

आप दोहरे उद्धरण चिह्नों आवश्यकता नहीं है? – michaelsnowden

+0

@michaelsnowden जरूरी नहीं है। सुरक्षित होने के लिए, हाँ, लेकिन प्रश्न ने स्पष्ट रूप से किसी भी स्थान के साथ पथ नहीं बताया और आगे सुझाव दिया कि समस्या '$ {filepath_newstap.sh' के रूप में '$ {filepath_newstap} .sh' के रूप में व्याख्या की गई' '{filepath} _newstap .sh', जो समस्या को हल करेगा। –

+0

मुझे विश्वास नहीं है कि यह सच है: http://stackoverflow.com/a/6697781/2770572 – michaelsnowden