बैश में, मैं चर नाम कैसे गूँज सकता हूँ, चर मान नहीं? [बन्द है]


18

मान लीजिए कि मेरे पास varबैश में एक चर है। मैं इसके लिए एक मूल्य प्रदान कर सकता हूं। उदाहरण के लिए, मैं इसे एक स्ट्रिंग बनाऊंगा:

var="Test"

मैं echoके नाम पर चाहता हूँ var, नहीं द्वारा आयोजित मूल्य var। (मैं बाद के साथ कर सकता हूं echo $var, लेकिन मैं वास्तव में पूर्व करना चाहता हूं।)

एसओ से इस सवाल का जवाब उपयोग करने के लिए कहता है echo ${!var}, लेकिन जब मैं ऐसा करता हूं कि मैं गूंजता है तो बस एक खाली लाइन देता है। उदाहरण के लिए, यह बैश स्क्रिप्ट

#!/bin/bash

echo "Hi"
var="Test"
echo ${!var}
echo "Bye"

यह आउटपुट देता है:

Hi

Bye

हाय और बाय के बीच सिर्फ एक खाली लाइन के साथ , var के बजाय । मैं क्या गलत कर रहा हूं?

मैं Ubuntu 10.04.4 पर बैश 4.1.5 (1) चला रहा हूं ।


11
इर ... बस echo var?
ब्रिअम

5
मैं वास्तव में इस बात को नहीं समझता। जैसा कि @Braiam बताते हैं, चूंकि आप चर का नाम पहली जगह में परिभाषित कर रहे हैं, आप हमेशा इसे जान पाएंगे और हमेशा इसे प्रिंट कर पाएंगे। आप वास्तव में क्या करने की कोशिश कर रहे हैं?
terdon

3
मुझे लगता है कि आप एसओ समाधान के बहाव से चूक गए हैं; कोशिशvar=Test; Test=SO; echo ${!var}
इरुवर

मैं यह भी नहीं मिलता है, लेकिन यह आप क्या करने की कोशिश कर रहे हैं? इको '$ वर'
रेनन विसेंट

मैं वास्तव में उत्सुक हूं, कृपया हमें बताएं कि आपको इसके लिए क्या चाहिए!
बुबाकाज़ौबा

जवाबों:


23

खोल पैरामीटर विस्तार $ {! नाम @} या $ {! नाम *} चाल कर सकता है,

$ foo=bar
$ var_name=(${!foo@})
$ echo $var_name" = "$foo
foo = bar

हालांकि संभव है कि मैं इस की उपयोगिता की कल्पना नहीं कर सकता ...


2
ध्यान दें कि अगर fooपरिभाषित नहीं foobarहै, लेकिन आपको मिलेगा foobar। अन्य विकल्प: var_name=${-+foo}(या ${foo+foo}), var_name=$'foo', var_name=$"foo":-)
स्टीफन Chazelas

1
अगर दो चर दिखाई देते हैं, फू और फोब्बर, दोनों परिभाषित होते हैं, तो अभिव्यक्ति ${!foo@}का मूल्यांकन होगा foo foobar। उत्तर टिप्पणी के रूप में, इसकी उपयोगिता की कल्पना करना कठिन है।
कॉप्पनोब

30

यदि आप एक स्थिर चर नाम का उत्पादन करना चाहते हैं, तो आप $-sign से बच सकते हैं :

echo \$var

3
यह स्वीकृत समाधान होना चाहिए।
डेविड पॉक्सन

9
बिल्कुल भी नहीं!! यह उत्तर एक अच्छा समाधान नहीं है। यह केवल आउटपुट के लिए जा रहा है $var, लेकिन यह बेकार है अगर चर नाम गतिशील है। उदाहरण के लिए, मान लें कि आपको पर्यावरण चर के एक सेट को फ़िल्टर करने की आवश्यकता है PREFIX_, जिसकी शुरुआत एक सेट से होती है , लेकिन आप सेट के आकार या उसमें मौजूद चर नामों के बारे में नहीं जानते हैं। इस परिदृश्य के लिए स्वीकृत समाधान अधिक उपयुक्त है।
हाइक्टर वाल्वरडे पारेजा

उर्फ var_name = "$ (गूंज \ $ वर)"
योर्डन जॉर्जियेव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.