bash 中带感叹号的变量替换

bash 中带感叹号的变量替换

我的 .cfg bash 脚本文件中有以下几行

DDF_SOURCE="siebel_DATA_DATE_FORMAT"
DATA_DATE_FORMAT=${!DDF_SOURCE}

}是如何${!DDF_SOURCE计算的?是的!siebel_DATA_DATE_FORMAT,这对我来说没有意义。

答案1

那是一个间接扩张,记录在man bash节中扩张,小节参数扩展:

如果参数的第一个字符是感叹号 (!),则引入一级变量间接寻址。 Bash 使用由参数的其余部分形成的变量的值作为变量的名称;然后扩展该变量,并在其余替换中使用该值,而不是参数本身的值。这称为间接扩展。

bash-4.2$ DDF_SOURCE="siebel_DATA_DATE_FORMAT"

bash-4.2$ siebel_DATA_DATE_FORMAT='Hello Indirect Redirection'

bash-4.2$ DATA_DATE_FORMAT=${!DDF_SOURCE} # siebel_DATA_DATE_FORMAT must get value before this line

bash-4.2$ echo $DATA_DATE_FORMAT
Hello Indirect Redirection

相关内容