【发布时间】:2017-04-17 03:28:37
【问题描述】:
我有一个具有以下条件的代码块,不确定它到底是做什么的。
$var = "${args}_Some_Text"
if [ "${!var}" == '' ];then
echo "$var is not defined !!!"
fi
【问题讨论】:
标签: bash shell variable-expansion
我有一个具有以下条件的代码块,不确定它到底是做什么的。
$var = "${args}_Some_Text"
if [ "${!var}" == '' ];then
echo "$var is not defined !!!"
fi
【问题讨论】:
标签: bash shell variable-expansion
这称为变量间接扩展。
$ 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 Reference Manual → 3.5.3 Shell Parameter Expansion:
如果参数的第一个字符是感叹号 (!),并且 parameter 不是 nameref,则它引入了变量间接级别。 Bash 使用由其余参数形成的变量的值作为变量的名称;然后扩展此变量,并将该值用于替换的其余部分,而不是 parameter 本身的值。这称为间接扩展。如果 parameter 是 nameref,这将扩展为参数引用的变量的名称,而不是执行完整的间接扩展。例外情况是下面描述的 ${!prefix*} 和 ${!name[@]} 的扩展。感叹号必须紧跟在左大括号之后才能引入间接性。
【讨论】: