【发布时间】:2020-10-16 20:10:23
【问题描述】:
我有一个带有这样占位符的配置文件(本例中存储在/tmp/var)
ldap_bind_dn='${bind_dn}'
现在我想将 ${bind_dn} 替换为同名的环境变量(在 Docker 中设置)。
export $bind_dn=CN=my-user,CN=Users,DC=example,DC=com
处理上述测试文件后的预期结果是
ldap_bind_dn='CN=my-user,CN=Users,DC=example,DC=com'
我尝试了sed,但它没有将其替换为 env 变量的值
$ sed "s#\${\(.*\)}#$\1#" /tmp/var
bind_dn='$bind_dn'
为什么sed 替换为$bind_dn 而不是值?我希望变量已被处理,因为我没有转义 $ 符号。
表达式本身有效,只有替换无效:
$ sed "s#\${\(.*\)}#test123#" /tmp/var
bind_dn='test123'
当目标变量被硬编码时,替换也正确完成
$ sed "s#\${\(.*\)}#$bind_dn#" /tmp/var
bind_dn='CN=my-user,CN=Users,DC=example,DC=com'
但由于我们有一堆配置变量,我想自动替换格式为${NAME} 的所有环境变量。
【问题讨论】:
标签: regex bash ubuntu sed environment-variables