在sed替换中逃避报价

时间:2018-04-18 17:26:09

标签: regex sed

我试图以像

这样的sed替换输出转义引号
stuff='something=something_else'
var='new_value'
echo ${stuff} | sed "s/something=\S*/something_new=\\\"${var}\\\"/g"

我希望

something_new=\"new_value\"

但我正在

something_new="new_value"

为什么我的报价没有被转义?

2 个答案:

答案 0 :(得分:1)

在命令中将\\\替换为\\\\\

答案 1 :(得分:0)

不要将整个脚本用双引号括起来,因为你将它暴露给shell进行解释并让你的生活更加艰难,正如你刚刚发现的那样。始终在脚本周围使用单引号,只显示您希望shell扩展的任何变量,方法是结束单引号,双引号变量,然后重新启动单引号:

$ echo "$stuff" | sed 's/something=\S*/something_new=\\"'"$var"'\\"/g'
something_new=\"new_value\"

这样,除了其他好处之外,您不必添加额外的转义来阻止shell解释您无意中暴露给shell解释的脚本的其余部分!