我有一个代码块,其中包含以下条件,不确定它到底是做什么的。
$var = "${args}_Some_Text"
if [ "${!var}" == '' ];then
echo "$var is not defined !!!"
fi
$var = "${args}_Some_Text"
if [ "${!var}" == '' ];then
echo "$var is not defined !!!"
fi
这被称为变量间接扩展。
$ 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
如您所见,这是一种定义“变量变量”的方法。也就是说,使用变量的内容作为另一个变量的名称。
如果参数的第一个字符是感叹号(!),并且parameter不是nameref,则它引入了一个变量间接级别。 Bash使用从parameter其余部分形成的变量的值作为变量的名称;然后,该变量被扩展并且该值在替换的其余部分中使用,而不是使用parameter本身的值。 这被称为间接扩展。 如果parameter是nameref,则将其扩展为由parameter引用的变量的名称,而不是执行完整的间接扩展。 ${!prefix *}和${!name [@]}的扩展是例外,下面会进行描述。感叹号必须紧随左括号后面,以引入间接性。