2017-08-31 112 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