ECHO 变量的 Linux ECHO 输出

ECHO 变量的 Linux ECHO 输出

我有一个变量(var),其返回值为VAR1$var具有值VAR1)。有一个输入文件VAR1定义了 ( VAR1=ABCDEF)

我如何使用来echo获取值?ABCDEF$var

我尝试了echo $(echo $var)许多其他选项,但我总是得到输出 as VAR1orecho VAR1但从来没有ABCDEF。我在声明source的文件中使用VAR1,在命令提示符等中尝试过。

答案1

假设您使用的是bashshell:

$ source ./file
$ echo "$VAR1"
ABCDEF
$ var=VAR1
$ echo "${!var}"
ABCDEF

通过使用${!var}你使用变量间接bash。变量的值var用于获取要扩展的变量的名称。


bash还可以使用名称引用变量:

$ source ./file
$ echo "$VAR1"
ABCDEF
$ declare -n var="VAR1"
$ echo "$var"
ABCDEF

在这里,var变量指的是VAR1变量,因此$var将扩展为$VAR1扩展为的任何内容。

名称引用最初是一个ksh功能,在该 shell 中它们是用 声明的typeset -n

名称引用对于在调用 shell 函数时传递对数组的引用非常有用。


在任何sh外壳中:

$ . ./file
$ echo "$VAR1"
ABCDEF
$ var=VAR1
$ eval "echo \"\$$var\""
ABCDEF

eval实用程序采用一个将重新评估的字符串。在这里,我们给它字符串echo "$VAR1"(扩展后$var)。

问题在于eval,如果不小心创建参数字符串,很容易引入错误或漏洞。

答案2

假设您正在使用bash,您可以通过间接引用轻松完成此操作:

$ foo=bar
$ bar=magicword
$ printf "%s\n" "${!foo}"
magicword

语法$var(or ${var}) 产生变量 的内容var

语法${!var}生成​​变量的内容命名于 var

相关内容