2017-08-31 108 views
0

我想知道如何在知道變量名稱時打印變量值。 我需要一點幫助把所有的東西放在一起。如何在bash中按名稱打印變量的值

假設我有a = A和b = B。此外,我有文件中的a和b列表。我想打印

a=A 
b=B 

我與eval測試,但我是不是不能做一個for循環。我想是因爲我沒能捕捉到的eval結果...

,我可以把這樣在一起,但它的氣味......

設置

$ cat f.txt 
a 
b 
$ a=A 
$ b=B 

執行

for n in `cat f.txt` 
do 
    echo -n $n 
    eval echo \$$n 
done 

,並希望結果是

a=A 
b=B 

但如果我以後需要使用的值,它不會工作...

我不能做的是

val=`eval echo \$$n` 

能夠做到echo $val以後。

+0

你真的想讀http://mywiki.wooledge.org/ DontReadLinesWithFor和[何時將引號圍繞在shell變量上?](https://stackoverflow.com/questions/10067266/when-to-wrap-quotes-around-a-shell-variable) – tripleee

+0

感謝您的鏈接,但我只是想保持簡單... – Betlista

+0

正確地做它並不複雜。 – tripleee

回答

0

這個怎麼樣?

$ for n in `cat f.txt `; do 
> val=$(eval "echo \$$n") 
> echo $n=$val 
> done 
a=A 
b=B 

當然你不需要使用任何額外的變量(val),它可能看起來像:

$ for n in $(cat f.txt); do echo $n=$(eval "echo \$$n"); done 
a=A 
b=B 
+0

謝謝,就是這樣,當我嘗試我沒有在引號中 - '$(eval echo \ $$ n)',也許這就是@ tripleee想告訴我... – Betlista

0

你可以這樣做:

$ a=A 
$ echo $a 
A 
$ echo a=$a 
a=A 
+0

不,你正在'a'直接工作,但我有在其他變量中的名稱 - 在上面的例子中'n' ... – Betlista