如何显示变量名本身而不是shell中的值

时间:2015-08-08 07:52:37

标签: shell variables

例如:

  

α= S1; B = S2;因为我在$ a $ b;回声$ i;完成

我想a and bs1 and s2

我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

如果您使用的是bashksh,则间接参数扩展比使用eval更安全。

a=s1
b=s2

for i in a b; do
   echo "$i=${!i}"
done

如果您使用zsh,则语法略有不同。

for i in a b; do
   echo "$i=${(P)i}"
done

其他shell可能有不同的语法;查看其文档以获取详细信息。

如果您使用shell(例如/bin/shdash)而没有间接参数展开,则必须使用eval

for i in a b; do
    eval "echo $i=\$$i"
done

此处eval是安全的,因为您可以明确控制i的值。通常,应验证在eval参数中展开的任何参数,以确保您不会执行您不期望的代码。

答案 1 :(得分:0)

我明白了!

  

α= S1; B = S2;我在\ $ a \ $ b;回声$ i;完成

这将获得ab

如果您还想使用该值,请尝试以下操作:

  

α= S1; B = S2;我在\ $ a \ $ b;做eval“echo $ i”;完成

这将获得s1s2