扩展的通配
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
尽可能匹配的字母开始。