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

eju*_*ser 12 shell bash variable

有什么方法可以打印变量名称及其值吗?

j=jjj
k=kkk
l=lll

for i in j k l
do
    ....
done
Run Code Online (Sandbox Code Playgroud)

预期输出(每个变量在单独的行上):

j = jjj 
k = kkk
l = lll
Run Code Online (Sandbox Code Playgroud)

任何人都可以提出一种获得上述结果的方法吗?

Rom*_*est 25

以简单的方式:

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

for i in {j,k,l}; do echo "$i = ${!i}"; done
Run Code Online (Sandbox Code Playgroud)

输出:

j = jjj
k = kkk
l = lll
Run Code Online (Sandbox Code Playgroud)
  • ${!i}- bash变量扩展/间接(获取由 持有的变量名的值$i

  • 你也可以用 `{j..l}` 缩短 `{j,k,l}` :) (2认同)

jes*_*e_b 7

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

这在 Bash 手册中的3.5.3 Shell Parameter Expansion部分中进行了讨论

“A”运算符

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

因此,您可以这样做:

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

for i in {$j,$k,$l}; do 
    echo "${i@A}"
done
Run Code Online (Sandbox Code Playgroud)

你的结果应该是:

j='jjj'
k='kkk'
l='lll'
Run Code Online (Sandbox Code Playgroud)


thr*_*rig 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 )
% 
Run Code Online (Sandbox Code Playgroud)

  • 也适用于 Bash (4认同)