擴充套件的通配

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。在上面的例子中,我們看到我們可以將 tracystacy*(r-t) 相匹配。這個擴充套件的 glob 本身可以在否定的擴充套件 glob !(pattern-list) 中使用,以匹配 macy

$ echo !(*([r-t]))acy
macy

它匹配任何東西,它不能與零個或多個 rst,只留下 macy 儘可能匹配的字母開始。