1.5.6. Shell 通配符

经常有这种情况你期望命令成串自动执行而不需要挨个输入,将文件名扩展为 glob,(有时候被称为 通配符),以此来满足这方面的需求。

表 1.20. Shell glob 模式

shell glob 模式匹配规则描述
不以 “.“ 开头的文件名(段)
.以 “.“ 开头的文件名(段)
?精确字符
[…]包含在括号中的任意字符都可以作为精确字符
[a-z]a“ 到 “z“ 之间的任意一个字符都可以作为精确字符
[^…]除了包含在括号中的任意字符 ( “ 1^ 2”除外 ),其它字符都可以作为精确字符

尝试下列例子

  1. $ mkdir junk; cd junk; touch 1.txt 2.txt 3.c 4.h .5.txt ..6.txt
  2. $ echo *.txt
  3. 1.txt 2.txt
  4. $ echo *
  5. 1.txt 2.txt 3.c 4.h
  6. $ echo *.[hc]
  7. 3.c 4.h
  8. $ echo .*
  9. . .. .5.txt ..6.txt
  10. $ echo .*[^.]*
  11. .5.txt ..6.txt
  12. $ echo [^1-3]*
  13. 4.h
  14. $ cd ..; rm -rf junk

参见 glob(7)。

[注意]注意

与 shell 通用的文件名匹配方式不同, 使用 “ -name “ 选项的 find (1),其 shell 模式” * “ ,匹配以” . “开始的文件名.(新 POSIX 的特性)

[注意]注意

BASH 可以使用内置的 shopt 选项如 “ dotglob “,” noglob “,” nocaseglob “,” nullglob “,” extglob “定制全局行为,使用 bash ( 1 )查看详细说明。