Skip to content

Latest commit

 

History

History
31 lines (23 loc) · 1.51 KB

Wildcards.md

File metadata and controls

31 lines (23 loc) · 1.51 KB

通配符

通配符是特殊的字符,用来告诉 Shell 要匹配的规则。如果你有使用 DOS 的经验,你会认出 * 是用来匹配任何东西的通配符。bash 使用通配符来让你更容易地做你想做的事情。

第一个也是最常用的就是 * 。星号匹配任何字符和字符的组合,包括空。因此 b* 会匹配任何以 b 开头的文件,比如 b,ba,babc 等等。不怎么常用的是 ? 。这个字符只匹配单个字符。所以 b? 会匹配 ba,bb 等,而不会匹配 b,bab

darkstar:~$ touch b ba bab
darkstar:~$ ls *
b ba bab
darkstar:~$ ls b?
ba

不,有趣的地方还不至于此。除了这两个外,我们还有方括号 [] 。方括号允许我们匹配方括号中的字符。当 bash 看到方括号时,它会替换方括号中的内容。任何字符和数字的组合都可以被指定,用逗号分隔它们。同样的,字符和数字的范围也可以指定。下面举例。

darkstar:~$ ls a[1-4,9]
a1 a2 a3 a4 a9

因为 Linux 是区分大小写的,大写和小写的字母不同。在 ASCII 顺序中,大写字母都是位于小写字母之前的。因此当要表示包含大写字母和小写字母的范围时,请确保正确。

darkstar:~$ ls 1[W-b]
1W 1X 1Y 1Z 1a 1b
darkstar:~$ ls 1[w-B]
/bin/ls: cannot access 1[b-W]: No such file or directory

在第二个案例中,1[w-B] 是错误的范围,所以 shell 将其认为是文件名,因为没有那个文件所以告诉你不存在。