3

我想自动转义字符串中的一些特殊字符。我想通过一些 sed 来回显该字符串并通过管道传输它。这似乎在反引号内不起作用。那为什么

echo "foo[bar]" | sed 's/\[/\\[/g'

返回

foo\[bar]

FOO=`echo "foo[bar]" | sed 's/\[/\\[/g'` && echo $FOO

刚回来

foo[bar]

?

与 sed 相比,tr 在反引号内完美运行:

FOO=`echo "foo[bar]" | tr '[' '-' ` && echo $FOO

返回

foo-bar]
4

3 回答 3

16

不使用反引号而是使用 $() 怎么样?

FOO=$(echo "foo[bar]" | sed 's/\[/\\[/g') && echo $FOO

如果您坚持使用反引号,我认为您需要将所有 \ 额外转义为 double \

FOO=`echo "foo[bar]" | sed 's/\\[/\\\\[/g'` && echo $FOO
于 2009-09-29T13:19:53.590 回答
7

您需要转义反引号之间的反斜杠。

FOO=`echo "foo[bar]" | sed 's/\\[/\\\\[/g'` && echo $FOO

或者,使用$()(这实际上是推荐的方法)。

FOO=$(echo "foo[bar]" | sed 's/\[/\\[/g') && echo $FOO
于 2009-09-29T13:23:39.837 回答
2

通常,这是转义不足的情况

FOO=`echo "foo[bar]" | sed 's/\[/\\\[/g'` && echo $FOO
于 2009-09-29T13:23:14.363 回答