您可能已经在不知不觉中早已使用了通配符了。当您在 Windows® 中指定文件或寻找文件时,您使用 *
代表任意字符串。例如:*.txt
同所有以 .txt
结尾的文件相匹配。我们也在上一节常常使用到它们。不过,除了 *
,还有很多其他的通配符。
当您键入 ls *.txt 命令并按 Enter 后,寻找哪些文件同 *.txt
模式相匹配的任务不是由 ls 命令,而是由 shell
自己完成。这需要对命令行是如何被 shell
解析作进一步解释。当您键入:
$ ls *.txt readme.txt recipes.txt
该命令首先被分割成一系列单词(本例中的 ls
和 *.txt
)。当 shell 在某个单词中发现了 *
,它会将整个单词当作通配模式解析,并用所有相匹配的文件替换它。因此,该命令在执行前就变为 ls readme.txt recipe.txt,而这将得到期望的结果。其余通配符有:
/etc/*conf
:/etc
目录中所有以 conf
结尾的文件。它将同 /etc/inetd.conf
、/etc/conf.linuxconf
,并且也会同 /etc/conf
相匹配。请注意,*
也匹配空字符串。
image/{cars,space[0-9]}/*.jpg
:image/cars
、image/space0
、(...)、image/space9
目录中以 .jpg
结尾的文件。
/usr/share/doc/*/README
:所有 /usr/share/doc
的直接子目录中的全部 README
文件。比如 /usr/share/doc/mandrake/README
。但是不包括 /usr/share/doc/myprog/doc/README
。
[5] 请注意:虽然这对大多数语言适用,但可能不适用于您个人的语言设置(locale
)。这取决于字符排列顺序。对于某些语言配置,[a-z]
同 a、A、b、B、(...)、z 匹配。而且我们也没有考虑到事实上某些语言还具有带重音符号的字符等等。