शेल में परिवर्तनीय प्रक्षेप


103

मेरे पास एक चर है filepath=/tmp/name

चर का उपयोग करने के लिए, मुझे पता है कि मैं यह कर सकता हूं: $filepath

अपनी शेल स्क्रिप्ट में मैंने ऐसा कुछ करने का प्रयास किया (बैकटिक्स का इरादा है)

`tail -1 $filepath_newstap.sh`

यह रेखा विफल हो जाती है, डुह !, क्योंकि चर को नहीं कहा जाता है $filepath_newstap.sh

मैं _newstap.shचर नाम में कैसे जोड़ सकता हूँ ?

कृपया ध्यान दें कि बैकटिक्स का अभिप्राय अभिव्यक्ति मूल्यांकन से है।

जवाबों:


186

उपयोग

"$filepath"_newstap.sh

या

${filepath}_newstap.sh

या

$filepath\_newstap.sh

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

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


7
शायद यह भी उल्लेख set -uकिया गया है कि यदि आप अपरिभाषित चर का संदर्भ देते हैं तो स्क्रिप्ट को निरस्त करने का कारण बनता है।
ट्रिपल

1
${}दोहरे उद्धरण चिह्नों का उपयोग करने में क्या अंतर है ? क्या मुझे एक के बाद एक को पसंद करना चाहिए?
user31389

3
@ user31389: अंतर यह है कि जब चर में व्हॉट्सएप होता है, तब केवल दोहरे उद्धरण चिह्नों का काम होता है।
चेरोबा

@choroba चर नाम या चर मान ?
जोशुआ पिंटर

15

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

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

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

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

@michaelsnowden मुझे कुछ भी नहीं बताता है जिसके बारे में मुझे पहले से जानकारी नहीं है। आपको क्यों लगता है कि दोहरे उद्धरण चिह्नों की आवश्यकता है?

क्योंकि आप स्ट्रिंग प्रक्षेप करने की कोशिश कर रहे हैं, और आपको इसके लिए दोहरे उद्धरण चिह्नों की आवश्यकता है
michaelsnowden

@michaelsnowden पैरामीटर का विस्तार या तो दोहरे उद्धरण चिह्नों में होता है या पूरी तरह से उद्धरण के बाहर होता है। एकल उद्धरण या कोटेशन वाले वर्ण या अन्य वर्ण जो पहचानकर्ताओं में मान्य नहीं हैं, पैरामीटर विस्तार को रोकने का एकमात्र तरीका है। उदाहरण के लिए, "$filepath"_fooऔर ${filepath}_fooदोनों का विस्तार होगा /tmp/name_foo। हालांकि, '$filepath'_foo, "$"filepath_foo, और $"filepath"_fooसब से बचने के विस्तार पूरी तरह से होगा। यही कारण है कि पर्यावरण चर के export PATH=$PATH:$addpathलिए :$addpath(जो पैरामीटर विस्तार के अधीन होगा) जोड़ने का काम करता है PATH

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.