我有一个变量 ( var) 返回值VAR1($var具有值VAR1) 。有一个输入文件,它VAR1定义了 ( VAR1=ABCDEF)
如何使用echo来获取值ABCDEF使用$var?
我尝试了echo $(echo $var)许多其他选项,但我总是得到输出为VAR1or echo VAR1but never ABCDEF。我source在文件中使用了VAR1声明,在命令提示符等中尝试过。
假设您正在使用bash外壳:
$ source ./file
$ echo "$VAR1"
ABCDEF
$ var=VAR1
$ echo "${!var}"
ABCDEF
Run Code Online (Sandbox Code Playgroud)
通过使用${!var}您使用变量间接在bash。变量的值var用于获取要扩展的变量的名称。
在bash你也可以使用一个名称引用变量:
$ source ./file
$ echo "$VAR1"
ABCDEF
$ declare -n var="VAR1"
$ echo "$var"
ABCDEF
Run Code Online (Sandbox Code Playgroud)
在这里,var变量指的是VAR1变量,因此$var将扩展为扩展到的任何内容$VAR1。
名称引用最初是一个ksh特性,在那个 shell 中,它们是用typeset -n.
名称引用对于在调用 shell 函数时传递对数组的引用非常有用。
在任何sh外壳中:
$ . ./file
$ echo "$VAR1"
ABCDEF
$ var=VAR1
$ eval "echo \"\$$var\""
ABCDEF
Run Code Online (Sandbox Code Playgroud)
该eval实用程序采用一个字符串,它将重新评估该字符串。在这里,我们给它一个字符串echo "$VAR1"(在扩展之后$var)。
问题eval在于,通过粗心创建其参数字符串,很容易引入错误或漏洞。