【问题标题】:What does "${!var}" mean in shell script? [duplicate]"${!var}" 在 shell 脚本中是什么意思? [复制]
【发布时间】:2017-04-17 03:28:37
【问题描述】:

我有一个具有以下条件的代码块,不确定它到底是做什么的。

$var = "${args}_Some_Text"
if [ "${!var}"  == '' ];then
     echo "$var is not defined !!!"
fi 

【问题讨论】:

    标签: bash shell variable-expansion


    【解决方案1】:

    这称为变量间接扩展。

    $ 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[@]} 的扩展。感叹号必须紧跟在左大括号之后才能引入间接性。

    【讨论】:

      猜你喜欢
      • 2010-12-25
      • 1970-01-01
      • 2012-04-19
      • 2018-05-11
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 2015-05-29
      相关资源
      最近更新 更多