शॉबस्ट में SHELL-FORMAT क्या है?


20

जब मैंने ठोकर खाई तो मैं envsubstकेवल विशिष्ट चर की जगह के लिए इसका इस्तेमाल करना चाहता था और संदेह था कि शेल-फॉरमैट पैरामीटर वह हो सकता है जो चाहता है लेकिन मुझे यह काम करने के लिए नहीं मिल सकता है।

दुर्भाग्य से, manऔर infoपृष्ठ कोई उदाहरण नहीं देते हैं और केवल कहते हैं

यदि एक SHELL-FORMAT दिया जाता है, केवल उन पर्यावरण चर जिन्हें SHELL-FORMAT में संदर्भित किया जाता है,

जो मुझे नहीं बताता कि उन्हें कैसे संदर्भित किया जाए।

जवाबों:


20

जैसा कि पाठ द्वारा इंगित किया गया है, आपको बस एक सामान्य शेल कमांड के रूप में चर (जैसे $VARNAMEया इसके द्वारा ${VARNAME}) को संदर्भित करना होगा । हालांकि, आपको यह सुनिश्चित करना होगा कि शेल उन्हें पहले से विस्तारित नहीं करता है।

इसे समझने के लिए यहां कुछ उदाहरण दिए गए हैं (मानकर export FOO=BAR):

$ echo '$FOO$FOO2' | envsubst
BAR

जैसा कि आप देख सकते हैं, $ FOO2 को "" द्वारा बदल दिया गया है क्योंकि यह परिभाषित नहीं था। अब हम उस प्रतिस्थापन को केवल $ FOO द्वारा प्रतिबंधित कर सकते हैं:

$ echo '$FOO$FOO2' | envsubst '$FOO'
BAR$FOO2

""इसके बदले उपयोग करने से ''पहले प्रतिस्थापन की आवश्यकता होगी:

echo '$FOO$FOO2' | envsubst "$FOO"
$FOO$FOO2

(यह प्रभावी कॉल की मात्रा है envsubst "BAR"जो कोई चर का पता लगाता है ताकि कोई भी प्रतिस्थापित न हो।)

जैसा कि man-पृष्ठ ने कहा, संदर्भित सभी चर SHELL-FORMATको प्रतिस्थापित किया जाता है, इसलिए हम ऐसा भी कर सकते हैं:

echo '$FOO$FOO2$FOO3' | envsubst '$FOO some more text ${FOO3}'
BAR$FOO2

जैसा कि आप देख सकते हैं, SHELL-FORMATकाफी लचीला है।

अंत में, पैरामीटर --variablesआपको मूल्यांकन करने की अनुमति देता है कि किस चर को प्रतिस्थापन द्वारा चुना गया है SHELL-FORMAT:

envsubst --variables '$FOO some more text ${FOO3}'
FOO
FOO3

इसके बाद के समय से पहले प्रतिस्थापन उदाहरण में त्रुटि दिखाई गई होगी:

$ envsubst --variables "$FOO"
(empty string returned)

जैसा कि इन- manपेज में कहा गया है , envsubstजब --variablesमौजूद हो तो कोई भी स्टडप्यूट प्रोसेस नहीं करता है।


8

यहाँ कुछ उदाहरण दिए गए हैं जो मुझे यह समझने में मदद करते हैं कि इसे ठीक से कैसे उपयोग किया जाए। यह मेरे लिए आश्चर्यजनक था कि पैरामीटर में उल्लिखित चर को envsubstonly बदल देता है।

$ export FOOX="foox"
$ export FOOY="fooy"
$ export FOOZ="fooz"

$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst            
x foox y fooy z fooz

$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst '$FOOX'
x foox y $FOOY z $FOOZ

$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst '$FOOX $FOOZ'
x foox y $FOOY z fooz

$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst '$FOOZ $FOOY'
x $FOOX y fooy z fooz

मुझे समझ नहीं आया कि SHELL-FORMAT का क्या मतलब है, फिर भी पता नहीं क्यों इसे ऐसा नाम दिया गया है। लेकिन उपरोक्त प्रयोगों के बाद मुझे लगता है कि मुझे पता है कि यह क्या करता है।


यह उन उदाहरणों को पढ़ने के बाद मुझे बहुत मदद करता है, आदमी मदद और जानकारी से, केवल SHELL-FORMAT मौजूद है, लेकिन इसे घोषित करने का तरीका नहीं जानते हैं!
zw963

1

वर्बेज थोड़ा भ्रम की स्थिति है। मदद पाठ को और अधिक सावधानी से पुन: लिखने के लिए:

SHELL-FORMATएक वैकल्पिक पाठ कमांड लाइन तर्क है जिसमें पर्यावरण चर का संदर्भ है। पाठ में एक पर्यावरण चर का संदर्भ देने के लिए, चर नाम के साथ उपसर्ग करें $। उदाहरण के लिए: Hello $FOO World $BARपर्यावरण चर FOOऔर संदर्भ BAR। बाकी स्ट्रिंग को नजरअंदाज कर दिया जाता है। यदि SHELL-FORMATकमांड लाइन तर्क मौजूद है, तो जब स्टड के माध्यम से प्राप्त पाठ पर परिवर्तनीय प्रतिस्थापन होता है, तो यह SHELL-FORMATकमांड लाइन तर्क में संदर्भित चर तक सीमित होगा ।

तो अपने प्रश्न का स्पष्ट रूप से उत्तर देने के लिए: चर नाम के साथ उपसर्ग करें $

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