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