अंडरस्कोर के बाद वैरिएबल के बैश वेरिएबल सबस्टेशन


12

चर BUILDNUMBER230 मान पर सेट है। मैं 230_कमांड के लिए प्रिंट होने की उम्मीद करता हूं , echo $BUILDNUMBER_लेकिन आउटपुट खाली है जैसा कि नीचे दिखाया गया है।

# echo $BUILDNUMBER_

# echo $BUILDNUMBER
230

जवाबों:


27

आदेश echo $BUILDNUMBER_वैरिएबल के मान को प्रिंट करने वाला है $BUILDNUMBER_जो सेट नहीं किया गया है (अंडरस्कोर वैरिएबल नाम के लिए एक वैध चरित्र है जैसा कि स्पष्ट रूप से जेफ स्कालर द्वारा नोट किया गया है)

आपको बस चर नाम के आसपास ब्रेसिज़ (घुंघराले ब्रैकेट) लगाने या सबसे कठोर printfटूल का उपयोग करने की आवश्यकता है :

echo "${BUILDNUMBER}_"
printf '%s_\n' "$BUILDNUMBER"

पुनश्च: हमेशा अपने चर का उद्धरण करें।


1
दस्तावेज़ीकरण और मानक एक रिक्त स्ट्रिंग के लिए सेट किए गए चर के लिए "अशक्त" शब्द का उपयोग करते हैं (जैसा कि एक अस्थिर चर के विपरीत)। मैंने संपादन की स्वतंत्रता ली।
इल्काचू

8

जैसा कि जॉर्ज वैसिलिउ ने पहले ही समझाया था , ऐसा इसलिए है क्योंकि आप $BUILDNUMBER_इसके बजाय चर को प्रिंट कर रहे हैं $BUILDNUMBER। जो आप चाहते हैं उसे पाने का सबसे अच्छा तरीका है ${BUILDNUMBER}_जैसा कि जॉर्ज ने समझाया। यहाँ कुछ और विकल्प दिए गए हैं:

$ echo "$BUILDNUMBER"_
230_
$ echo $BUILDNUMBER"_"
230_
$ printf '%s_\n' "$BUILDNUMBER"
230_

हमें पता है कि चर क्या है, लेकिन हम नहीं जानते कि क्या $IFSधारण करता है, इसलिए echo $BUILDNUMBER"_"अभी भी गलत है। तीन में से, केवल printf '%s_\n' "$BUILDNUMBER"सही है अगर हम नहीं जानते कि क्या है $BUILDNUMBERया $IFSपकड़ है।
स्टीफन चेजलस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.