2 shell escaping sed backticks
我想自动转义字符串中的一些特殊字符.我想到了回应那个字符串并通过一些seds管道.这似乎不适用于反叛内容.那么为什么呢
echo "foo[bar]" | sed 's/\[/\\[/g'
Run Code Online (Sandbox Code Playgroud)
返回
foo\[bar]
Run Code Online (Sandbox Code Playgroud)
但
FOO=`echo "foo[bar]" | sed 's/\[/\\[/g'` && echo $FOO
Run Code Online (Sandbox Code Playgroud)
回来
foo[bar]
Run Code Online (Sandbox Code Playgroud)
?
与sed相比,tr在反引号中完美运行:
FOO=`echo "foo[bar]" | tr '[' '-' ` && echo $FOO
Run Code Online (Sandbox Code Playgroud)
回报
foo-bar]
Run Code Online (Sandbox Code Playgroud)
ffo*_*orw 16
如何不使用反引号但使用$()?
FOO=$(echo "foo[bar]" | sed 's/\[/\\[/g') && echo $FOO
Run Code Online (Sandbox Code Playgroud)
如果你坚持使用反引号,我认为你需要额外逃脱所有\进入双\
FOO=`echo "foo[bar]" | sed 's/\\[/\\\\[/g'` && echo $FOO
Run Code Online (Sandbox Code Playgroud)
你需要逃避反引号之间的反斜杠.
FOO=`echo "foo[bar]" | sed 's/\\[/\\\\[/g'` && echo $FOO
Run Code Online (Sandbox Code Playgroud)
或者,使用$()(这实际上是推荐的方法).
FOO=$(echo "foo[bar]" | sed 's/\[/\\[/g') && echo $FOO
Run Code Online (Sandbox Code Playgroud)