我试图以像
这样的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"
为什么我的报价没有被转义?
答案 0 :(得分:1)
在命令中将\\\
替换为\\\\\
。
答案 1 :(得分:0)
不要将整个脚本用双引号括起来,因为你将它暴露给shell进行解释并让你的生活更加艰难,正如你刚刚发现的那样。始终在脚本周围使用单引号,只显示您希望shell扩展的任何变量,方法是结束单引号,双引号变量,然后重新启动单引号:
$ echo "$stuff" | sed 's/something=\S*/something_new=\\"'"$var"'\\"/g'
something_new=\"new_value\"
这样,除了其他好处之外,您不必添加额外的转义来阻止shell解释您无意中暴露给shell解释的脚本的其余部分!