在我们正式深入探讨文件通配之前,让我们先来理解一下什么是通配符模式。简单来说,这些模式就是包含了一些特殊符号的字符串,例如 INLINECODEb83a4969 和 INLINECODE9d48db59。文件通配则是一个能够识别这些模式,并负责完成文件路径扩展的操作。在 2026 年的今天,虽然图形化界面和 AI 辅助编程已经高度发达,但掌握这种底层的文本匹配机制,依然是我们构建高效、自动化开发工作流的基石。让我们通过下面的例子来更清晰地理解这一点。
核心通配符机制深度解析
* 的路径扩展
如果你仔细观察上面的图片,你会发现我们创建了几个以 HELLO 和 hello 开头的目录,然后尝试删除这些目录。当我使用 INLINECODE61f60db9 时,它删除了 hello1、hello2 和 hello3 这几个目录。这里 INLINECODEf5513704 后面使用的 INLINECODEf2f3a5f4 符号会识别以 INLINECODE8d5f76b0 开头的部分,随后匹配零个或多个任意字符。
#### 1) 星号 (*)
* 用于匹配任意数量的字符(零个或多个)。为了更深入地理解,你可以参考上面提到的例子。
#### 2) 问号 (?)
INLINECODEa7a2f41d 用于精确匹配一个字符。在上面的图片中,你可以观察到 INLINECODE5fbf0017 只能匹配确切的单个字符,并且它是在行尾使用的。因此,使用 INLINECODE0fe53e1d 将会匹配所有以 INLINECODE3264e667 开头且后面还有一个字符的文件或目录。
#### 3) 方括号 ([])
方括号用于匹配 [] 内部包含的字符。请参考下图:
INLINECODE519c1ee1 可以用于匹配指定的精确字符,你也可以指定一个范围。就像在上面的例子中一样,使用 INLINECODE96415d7c 将会显示所有以 ‘hello‘ 开头,且下一个字符是 1 到 5 之间数字的文件和目录。
#### 4) 感叹号 (!)
! 用于排除在方括号内指定的字符列表中的字符。例如:
ls hello[!3]
它会显示以 hello 开头,但结尾字符不是 3 的目录
#### 5) 命名字符类 ([[:named:]])
它用于打印特定的命名值。它们的解释取决于 LC_CTYPE 区域设置;下面列出了一些常用的类:
- ‘[:alnum:]’:打印所有包含字母和数字的文件。同时考虑小写和大写字母。
- ‘[:alpha:]’:打印所有仅包含字母的文件。同时考虑小写和大写字母。
- ‘[:digit:]’:打印所有包含数字的文件。
- ‘[:lower:]’:打印所有包含小写字母的文件。
‘[:punct:]’:打印所有包含标点符号的文件。将会搜索 ! " # $ % & ‘ ( ) + , – . / : ; ? @ [ \ ] ^ INLINECODEa26b021bINLINECODE9e84a8fa?INLINECODE7601ec62[]INLINECODE284a7c81INLINECODE39f5f5aa?INLINECODEdce193e7src/controllers/legacy.tsINLINECODEd2b625e1rmINLINECODEed7b5836cpINLINECODEdca70cf7findINLINECODEc1a94e43extglobINLINECODEbf421e36INLINECODE6c3d78c4rm .jpgINLINECODEdb7a892aArgument list too longINLINECODEa29dfd60rmINLINECODE0016b3cdARGMAXINLINECODE673e82dbfindINLINECODE75199a14findINLINECODE697dd934-print0INLINECODEdb76d440-0INLINECODE05ecff6ffdINLINECODE3630cf43ripgrepINLINECODE25f18418../INLINECODE7f5f5546findINLINECODE36eea05e-print0INLINECODE9866c95axargs -0INLINECODEe6f8c3de-execINLINECODE9ff0bfb9shellcheckINLINECODE360a4d6frm -rf *INLINECODE76b71862rmINLINECODEc0aaead0extglob`)、并了解其在现代编程语言中的实现方式,我们不仅能写出更高效的 Shell 脚本,还能更好地与现代 AI 工具协作,构建出更健壮的系统。