glob

製備

$ 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

如果需要匹配特定字元,則可以使用’[]’。 ‘[]‘中的任何字元都將匹配一次。

$ echo [m]acy
macy
$ echo [st][tr]acy
stacy tracy

然而,[] glob 比這更通用。它還允許負匹配甚至匹配字元和字元類的範圍。通過使用 !^作為 [ 之後的第一個字元來實現負匹配。我們可以匹配 stacy

$ echo [!t][^r]acy
stacy

在這裡,我們告訴 bash,我們只想匹配不以 t 開頭的檔案,第二個字母不是 r,檔案以 acy 結尾。

可以通過用連字元(-)分隔一對字元來匹配範圍。任何落在這兩個封閉字元之間的字元(包括在內)都將匹配。例如,[r-t] 相當於 [rst]

$ echo [r-t][r-t]acy
stacy tracy

字元類可以由 [:class:] 匹配,例如,以便匹配包含空格的檔案

$ echo *[[:blank:]]*
file with space