如何使用 sed 将变量值替换为同名变量?

如何使用 sed 将变量值替换为同名变量?

我正在尝试编写一个脚本,将服务器配置文件更新为最新格式。该脚本的目的是将现有(定义的)变量复制到最新的配置(在临时文件中),然后用新生成的配置文件复制/覆盖旧的配置文件。

根据我的理解,使用双引号将扩展 中的变量sed。当模式中仅使用一个变量时,这似乎工作正常:

sed -i "s|random|$PASSWORD|g" /tmp/latest_config

在上面的示例中,临时配置文件已成功修改,并且 的所有实例random都被替换为 的值$PASSWORD。但是,反之则不行:

sed -i "s|$PASSWORD|random|g" /tmp/latest_config

在上面的示例中,没有任何反应,也没有 sed 错误等。临时配置文件中的值$PASSWORD未修改...

注意:$PASSWORD在第一个示例中,源自该脚本顶部的“旧”配置文件,但第二个示例的目标是替换变量值...


我在 SE 网络上看到了几十个类似的“变量”问题,但是许多答案都是错误的(例如使用单引号等)或者根本不适合我。我尝试了多种格式,包括单引号和双引号、括号(以区分环境变量与实际搜索的变量sed)...到目前为止没有任何效果,例如:

sed -i "s|$PASSWORD|$PASSWORD|g" /tmp/latest_config
sed -i "s|$PASSWORD|${PASSWORD}|g" /tmp/latest_config
sed -i "s|\$PASSWORD|${PASSWORD}|g" /tmp/latest_config
sed -i 's|$PASSWORD|"${PASSWORD}"|g' /tmp/latest_config
sed -i 's|\$PASSWORD|"${PASSWORD}"|g' /tmp/latest_config

唯一有效的解决方案是一种黑客解决方法

sed -i "s|\(^PASSWORD=\).*|PASSWORD=\"$PASSWORD\"|g" /tmp/latest-config

为什么?我是否需要先导出现有变量,还是这已经是最好的了?...

相关内容