如何打印变量名称及其值?


Answers:


21

用简单的方式:

j="jjj"
k="kkk"
l="lll"

for i in {j,k,l}; do echo "$i = ${!i}"; done

输出:

j = jjj
k = kkk
l = lll

  • ${!i}- bash的变量扩展/间接(获取变量名的所保存的值$i

2
您可以{j,k,l}短期使用{j..l}):也
αғsнιη

@αғsнιη,扩大范围是合理的,只要只有3个项目{j,k,l}就够了
RomanPerekhrest

1
j k l足够了。
斯特凡Chazelas

6

如果您拥有bash v4.4或更高版本,则可以使用${VAR@A}参数扩展运算符。

在Bash手册中的3.5.3 Shell参数扩展一节中对此进行了讨论。

'A'运算符

扩展是一个赋值语句或声明命令形式的字符串,如果对其进行评估,将使用其属性和值重新创建参数。

因此,您可以执行以下操作:

j="jjj"
k="kkk"
l="lll"

for i in {$j,$k,$l}; do 
    echo "${i@A}"
done

您的结果应该是:

j='jjj'
k='kkk'
l='lll'

5

或在zsh使用中declare -p

% j=jjj; k=kkk; l=(l l l)               
% for v in j k l; do declare -p $v; done
typeset j=jjj
typeset k=kkk
typeset -a l=( l l l )
% 

3
也与Bash合作
Steven Penny

2

虽然${!i}是一种更清洁,更快速的解决方案,但为完整起见,还可以通过以下示例获取间接引用:

 foo=bar
 bar=baz
 $ echo $foo
 bar
 $ eval echo \$${foo}
 baz

因此:

 j="jjj"
 k="kkk"
 l="lll"

 for i in {j,k,l}; do
   echo "$i = `eval echo \\$${i}`"
 done

给出:

 j = jjj
 k = kkk
 l = lll

参考文献:

间接参考

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.