Shell:打印变量名称和值?

rux*_*ain 2 shell

假设我有一个名为 superEcho 的函数。我希望它打印变量名称及其值。

#!/bin/bash


function superEcho() {
    echo "${v_day}"
    echo '${v_day}'
}

v_day=20220101
superEcho ${v_day}

# output
# 20220101
# ${v_day}
Run Code Online (Sandbox Code Playgroud)

从上面的代码中,我可以轻松获取参数名称“${v_day}”及其值。但是,如果我更改变量的名称怎么办?例如:

v_last_day=20211231
superEcho ${v_last_day}
Run Code Online (Sandbox Code Playgroud)

这个功能将不再起作用。我可以更改它以适应任何变量名称吗?

PS:这是一个包装函数,它不会要求用户更改代码。例如,您不能将变量名称作为参数传递:

superEcho "${v_day}" '${v_day}'
Run Code Online (Sandbox Code Playgroud)

Man*_*red 5

Bash 支持使用间接参数扩展${!parameter},您可以将其与变量名称一起使用:

#!/bin/bash

superEcho() { 
  echo "$1 = ${!1}"
}

v_day=20220101
superEcho v_day
Run Code Online (Sandbox Code Playgroud)

(请注意,您的版本superEcho不使用传递的参数,但v_day在任何情况下都会打印。)

  • 如果你的 PS 意味着你根本无法更改“superEcho”调用代码,那么我同意 ruxtain 的观点:不可能从变量的值推断出名称(至少一般而言)。 (2认同)