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