![bash 中带感叹号的变量替换](https://linux22.com/image/43393/bash%20%E4%B8%AD%E5%B8%A6%E6%84%9F%E5%8F%B9%E5%8F%B7%E7%9A%84%E5%8F%98%E9%87%8F%E6%9B%BF%E6%8D%A2.png)
我的 .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