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*则会立即导致错误.