擴充套件的通配
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
儘可能匹配的字母開始。