在Shell脚本中,"${!var}"是什么意思?

9
我有一个代码块,其中包含以下条件,不确定它到底是做什么的。
$var = "${args}_Some_Text"
if [ "${!var}"  == '' ];then
     echo "$var is not defined !!!"
fi 
1个回答

20

这被称为变量间接扩展。

$ hello="this is some text"   # we set $hello
$ var="hello"                 # $var is "hello"
$ echo "${!var}"              # we print the variable linked by $var's content
this is some text

如您所见,这是一种定义“变量变量”的方法。也就是说,使用变量的内容作为另一个变量的名称。

来自Bash参考手册→3.5.3 Shell参数扩展

如果参数的第一个字符是感叹号(!),并且parameter不是nameref,则它引入了一个变量间接级别。 Bash使用从parameter其余部分形成的变量的值作为变量的名称;然后,该变量被扩展并且该值在替换的其余部分中使用,而不是使用parameter本身的值。 这被称为间接扩展。 如果parameter是nameref,则将其扩展为由parameter引用的变量的名称,而不是执行完整的间接扩展。 ${!prefix *}和${!name [@]}的扩展是例外,下面会进行描述。感叹号必须紧随左括号后面,以引入间接性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接