为什么bash文档建议引用通配符?

Cac*_*aco 1 linux bash wildcard

在几个手册(包括官方GNU/Linux命令行工具tldp.org)中,建议使用单引号(或双引号)来避免bash解释通配符或正则表达式符号,如插入符号(^)和美元($).

但在一些例子中,没有必要使用单/双引号.例如:

(1)

$ touch 'fo*'
Run Code Online (Sandbox Code Playgroud)

$ touch fo*
Run Code Online (Sandbox Code Playgroud)

fo*在两个命令行窗体中创建相同的文件.

(2)

$ grep '^foo' file.txt
Run Code Online (Sandbox Code Playgroud)

$ grep ^foo file.txt
Run Code Online (Sandbox Code Playgroud)

foo在file.txt行的开头搜索一个字符串.

为什么手册建议使用单/双引号来避免bash解释,如果bash实际上不首先解释一些通配符和正则表达式符号?

小智 6

如果foo当前目录中有一个文件名称,则touch 'fo*'触摸fo*,但touch fo*会扩展到touch foo并触摸它.

如果nullglob设置了该选项并且不fo*存在文件名匹配,touch fo*则会扩展为just touch并抱怨缺少的操作数.

如果failglob设置了该选项且不fo*存在文件名匹配,touch fo*则会立即导致错误.