tem*_*ser 4 bash shell variable-expansion
我有一个具有以下条件的代码块,不知道它究竟是做什么的.
$var = "${args}_Some_Text"
if [ "${!var}" == '' ];then
echo "$var is not defined !!!"
fi
Run Code Online (Sandbox Code Playgroud)
fed*_*qui 12
这称为可变间接扩展.
$ 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
Run Code Online (Sandbox Code Playgroud)
如您所见,这是一种定义"变量变量"的方法.也就是说,使用其内容是另一个变量名称的变量.
如果参数的第一个字符是感叹号(!),并且参数不是nameref,则它引入了一个变量间接的级别.Bash使用从参数的其余部分形成的变量的值作为变量的名称; 然后展开此变量,并将该值用于替换的其余部分,而不是参数本身的值.这被称为间接扩张.如果参数是nameref,则会扩展为参数引用的变量的名称,而不是执行完整的间接扩展.例外情况是下面描述的$ {!prefix*}和$ {!name [@]}的扩展.感叹号必须紧跟左支撑,以引入间接.