我想自动转义字符串中的一些特殊字符。 我想到了回应那个字符串并通过一些seds管道。这似乎不适用于反叛内容。 那么为什么呢?
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]
答案 0 :(得分:16)
如何不使用反引号但使用$()?
FOO=$(echo "foo[bar]" | sed 's/\[/\\[/g') && echo $FOO
如果你坚持使用反引号,我认为你需要额外转义所有\到双\
FOO=`echo "foo[bar]" | sed 's/\\[/\\\\[/g'` && echo $FOO
答案 1 :(得分:6)
你需要逃避反引号之间的反斜杠。
FOO=`echo "foo[bar]" | sed 's/\\[/\\\\[/g'` && echo $FOO
或者,使用$()
(这实际上是推荐的方法)。
FOO=$(echo "foo[bar]" | sed 's/\[/\\[/g') && echo $FOO
答案 2 :(得分:2)
通常,这是一个疏忽的案例
FOO=`echo "foo[bar]" | sed 's/\[/\\\[/g'` && echo $FOO