我正在尝试使用 sed 在 unix shell (bash) 上的字符串中转义 ('\') 分号 (';')。当我直接执行而不将值分配给变量时,它就可以工作。那是,
$ echo "hello;" | sed 's/\([^\\]\);/\1\\;/g'
hello\;
$
但是,将上述命令分配给变量时,它似乎不起作用:
$ result=`echo "hello;" | sed 's/\([^\\]\);/\1\\;/g'`
$
$ echo $result
hello;
$
知道为什么吗?
我尝试使用带引号和不带引号的值,但这没有帮助。任何线索都非常感谢。
顺便说一句,我首先认为字符串末尾的分号在某种程度上充当了终止符,因此 shell 没有继续执行sed
(如果这有任何意义的话)。但是,这似乎不是问题。我尝试使用不在字符串末尾的分号(介于两者之间)。我仍然看到与以前相同的结果。那是,
$ echo "hel;lo" | sed 's/\([^\\]\);/\1\\;/g'
hel\;lo
$
$ result=`echo "hel;lo" | sed 's/\([^\\]\);/\1\\;/g'`
$
$ echo $result
hel;lo
$