扩展的通配
Version >= 2.02
制备
$ mkdir globbing
$ cd globbing
$ mkdir -p folder/{sub,another}folder/content/deepfolder/
touch macy stacy tracy "file with space" folder/{sub,another}folder/content/deepfolder/file .hiddenfile
$ shopt -u nullglob
$ shopt -u failglob
$ shopt -u dotglob
$ shopt -u nocaseglob
$ shopt -u extglob
$ shopt -u globstar
Bash 的内置 extglob 选项可以扩展 glob 的匹配功能
shopt -s extglob
以下子模式包含有效的扩展 glob:
- ?(pattern-list)- 匹配给定模式的零次或一次
- *(pattern-list)- 匹配给定模式的零次或多次出现
- +(pattern-list)- 匹配给定模式的一个或多个实例
- @(pattern-list)- 匹配给定模式之一
- !(pattern-list)- 匹配除给定模式之外的任何内容
pattern-list 是由|分隔的球体列表。
$ echo *([r-t])acy
stacy tracy
$ echo *([r-t]|m)acy
macy stacy tracy
$ echo ?([a-z])acy
macy
pattern-list 本身可以是另一个嵌套的扩展 glob。在上面的例子中,我们看到我们可以将 tracy 和 stacy 与*(r-t) 相匹配。这个扩展的 glob 本身可以在否定的扩展 glob !(pattern-list) 中使用,以匹配 macy
$ echo !(*([r-t]))acy
macy
它匹配任何东西,它不能与零个或多个 r,s 和 t,只留下 macy 尽可能匹配的字母开始。