Bash'da, değişken değerini değil, değişken adını nasıl yansıtabilirim? [kapalı]


18

Diyelim ki bash'da bir değişkenim var var. Buna bir değer atayabilirim. Örneğin, ben bir dize yapacak:

var="Test"

echoAdını tutmak istiyorum var, sahip olduğu değeri değil var. (İkincisini ile yapabilirim echo $var, ama aslında ilkini yapmak istiyorum.)

SO'dan gelen bu sorunun cevabının kullanıldığını söylüyor echo ${!var}, ancak bunu yaptığımda yankı sadece boş bir satır döndürüyor. Örneğin, bu bash betiği

#!/bin/bash

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

bu çıktıyı döndürür:

Hi

Bye

Hi ve Bye arasında var yerine sadece boş bir çizgi vardır . Neyi yanlış yapıyorum?

Koşuyorum Bash 4.1.5 (1) üzerine Ubuntu 10.04.4 .


11
Hata ... sadece echo var?
Braiam

5
Bunun amacını gerçekten anlamıyorum. @Braiam'ın işaret ettiği gibi, değişkenin adını ilk etapta tanımladığınız için her zaman onu bilir ve her zaman yazdırabilirsiniz. Aslında ne yapmaya çalışıyorsun?
terdon

3
Bence SO çözümünün sapmasını kaçırdınız; deneyinvar=Test; Test=SO; echo ${!var}
iruvar

Ben de anlamıyorum ama sen ne yapmaya çalışıyorsun? echo '$ var'
Renan Vicente

Gerçekten merak ediyorum, lütfen bize bunun için neye ihtiyacın olduğunu söyle!
bubakazouba

Yanıtlar:


23

Kabuk parametre genişletme $ {! İsim @} veya $ {! İsim *} işe yarayacak,

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

Mümkün olmasına rağmen bunun faydasını hayal edemiyorum ...


2
fooTanımlı değilse , ancak foobar, alacağınızı unutmayın foobar. Diğer alternatifler: var_name=${-+foo}(veya ${foo+foo}), var_name=$'foo', var_name=$"foo":-)
Stéphane Chazelas

1
Görünen iki değişken varsa, foo ve foobar, her ikisi de tanımlanmışsa, ifade olarak ${!foo@}değerlendirilir foo foobar. Yanıtın belirttiği gibi, faydasını hayal etmek zor.
CppNoob

30

Statik bir değişken adı çıkarmak istiyorsanız, $-sign öğesinden kaçabilirsiniz :

echo \$var

3
Bu kabul edilen çözüm olmalıdır.
David Poxon

9
Al değil !! Bu cevap iyi bir çözüm değil. Bu sadece çıktı alacaktır $var, ancak değişken adının dinamik olması işe yaramaz. Örneğin, a ile başlayan bir dizi ortam değişkenini filtrelemeniz gerektiğini PREFIX_, ancak kümenin boyutunu veya içindeki değişken adlarını bilmediğinizi varsayalım. Kabul edilen çözüm bu senaryo için daha uygundur.
Héctor Valverde Pareja

aka var_name = "$ (echo \ $ var)"
Yordan Georgiev
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.