bash中带有感叹号的变量替换


46

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

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

${!DDF_SOURCE} 如何评价?会是!siebel_DATA_DATE_FORMAT,这对我来说没有意义。

Answers:


65

这是一个间接扩展,在EXPANSION部分的Parameter Expansion小节中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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.