shell:在反引号中使用 sed
我想自动转义字符串中的一些特殊字符。 我想回显该字符串并通过一些 sed 进行管道传输。这似乎在反引号内不起作用。 那么为什么
echo "foo[bar]" | sed 's/\[/\\[/g'
return
foo\[bar]
却
FOO=`echo "foo[bar]" | sed 's/\[/\\[/g'` && echo $FOO
只是 return 呢
foo[bar]
?
与 sed 相比,tr 在反引号内完美工作:
FOO=`echo "foo[bar]" | tr '[' '-' ` && echo $FOO
返回
foo-bar]
I want to escape some special chars inside a string automatically.
I thought of echoing that string and pipe it through some seds. This doesn't seem to work inside of backticks.
So why does
echo "foo[bar]" | sed 's/\[/\\[/g'
return
foo\[bar]
but
FOO=`echo "foo[bar]" | sed 's/\[/\\[/g'` && echo $FOO
just returns
foo[bar]
?
In contrast to sed, tr works perfectly inside of backticks:
FOO=`echo "foo[bar]" | tr '[' '-' ` && echo $FOO
returns
foo-bar]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不使用反引号而是使用 $() 怎么样?
如果您坚持使用反引号,我认为您需要将所有 \ 额外转义为双 \
How about not using backticks but use $() ?
if you insist on using backticks, I think you need to extra escape all \ into double \
您需要转义反引号之间的反斜杠。
或者,使用
$()
(这实际上是推荐的方法)。You need to escape the backslashes between the backticks.
Alternatively, use
$()
(this is actually the recommended method).通常,这是一种逃逸的情况
Usually, it's a case of underescaping