【发布时间】:2016-07-01 19:29:52
【问题描述】:
在一些手册中(包括官方的 GNU/Linux 命令行工具tldp.org)建议使用单引号(或双引号)来避免 bash 解释通配符或正则表达式符号,如插入符号 (^) 和美元 ($) .
但在某些示例中,没有必要使用单引号/双引号。例如:
(1)
$ touch 'fo*'
和
$ touch fo*
在两种命令行形式中创建相同的文件fo*。
(2)
$ grep '^foo' file.txt
和
$ grep ^foo file.txt
两者都在 file.txt 行的开头搜索 foo 作为字符串。
如果 bash 实际上并没有首先解释某些通配符和正则表达式符号,为什么手册建议使用单引号/双引号来避免 bash 解释?
【问题讨论】:
-
...因为墨菲定律是一回事。
-
上面第二高的答案很好地说明了原因。
-
它在匹配时解释它们。所以如果你有一个
foobar,那么touch fo*将扩展到那个。如果你设置了非默认的 shell 选项,那就更有趣了(阅读:不可预测和令人费解)。 -
引用
^foo不是绝对必要的;^在正则表达式中很特殊,但在 glob 模式中没有。尽管如此,引用它比向自己证明你不需要引用它更容易(在我写这篇文章时,我自己什至不是 100% 确定)。