我正在寻找有撇号的行,并尝试了一些看起来与我相同的表达; 然而,有些人工作,有些人没有.为什么我会得到以下行为:
egrep \' file # works as expected
egrep "\'" file # seems to return all lines
egrep "[\']" file # works as expected
egrep '\'' file # seems to be waiting for more input
Run Code Online (Sandbox Code Playgroud)
单引号和双引号在转义时有所不同.放在echo前面看看实际发送到的内容egrep:
$ echo egrep \' file
egrep ' file
$ echo egrep "\'" file
egrep \' file
$ echo egrep "[\']" file
egrep [\'] file
$ echo egrep '\'' file
>
Run Code Online (Sandbox Code Playgroud)
最后一种情况是提示更多输入,因为你仍然在一个单引号中:它不是\'单引号中的转义引号()(因为这不是你如何转义单引号.)这是单引号之间的反斜杠,尾随开头报价.
顺便说一句,要在单引号字符串中转义单引号,请使用如下结构:
$ echo 'foo'\''bar'
foo'bar
Run Code Online (Sandbox Code Playgroud)
这实际上是\'在两个单引号字符串之间放置一个裸的文字引号().然后将它们全部隐式连接在一起.
我不知道为什么"\'"匹配所有行(但它确实似乎.)