因此,我在正在编写的 bash 脚本上取得了一些进展,但似乎无法弄清楚如何编写以下内容以扩展变量。我尝试了正常的 ${variable} 和 \$(variable) 以及其他一些随机的无奈尝试。
我什至尝试使用 eval 将其包装在“”中,但它仍然不起作用(除非从命令行运行但在 bash 脚本中不起作用)。
sed -i 's/.*output_snat_lo.conf:/ - '\''\\-t nat -A POSTROUTING -s 10.0.0.1/32 -d $DNAT -j SNAT --to-source $SINT'\''\n&/' file.yaml
有什么建议么? TIA。
答案1
$DNAT
将单引号内部更改'"$DNAT"'
为终止单引号,启动双引号(因为您几乎总是希望在双引号内进行变量扩展以停止分词),放入变量,终止双引号并重新启动单引号。
sed -i 's|.*output_snat_lo.conf:| - '\''\\-t nat -A POSTROUTING -s 10.0.0.1/32 -d '"$DNAT"' -j SNAT --to-source '"$SINT"\''\n&|' file.yaml
答案2
如果字符串扩展包含路径分隔符(即/
),则必须使用另一个字符(不在模式中)。
另请注意,使用 $variables 时,请使用双引号,例如:
sed -i 's/old_string/new_string/' $some_file
变成
sed -i "s|$old_string|$new_string|" $some_file