Shell 模式匹配

除了以下特殊字符,其他任意都可以匹配。特殊字符可以使用 \ 转义。

*

匹配任意字符,包括 null

如果 globstar 开启,* 可用于文件名扩展,**可匹配所的文件、多级目录和子目录,如果以 / 结尾,将会只匹配目录。

?

匹配单个字符

[...]

匹配[]出现的任何一个字符。

一对字符,-连接,表示范围,比如:[a-z]

[后面出现,!^ 表示非,匹配[]中以外的字符。

-出现在第一个或者最后一个,可匹配 -

]出现在第一个可匹配]

[:class:] 表示一类字符。可匹配这一类字符中的任意一个。

字符含义
alnum字母与数字字符
alpha字母
asciiASCII字符
blank空格或制表符
cntrlASCII控制字符
digit数字
graph非控制、非空格字符
lower小写字母
upper大写字母
space空白字符,包括垂直制表符
print可打印字符
word单词字符
punct标点符号字符
xdigit十六进制数字

扩展模式匹配

shopt -s extglob,开启扩展模式。

pattern-list 可以是按 | 分隔的多个模式。

?(pattern-list)

匹配 0 次或者 1次

*(pattern-list)

匹配 0 次或者 多次

+(pattern-list)

匹配 1 次或者 多次

@(pattern-list)

匹配 1 次

!(pattern-list)

匹配除此之外的任意模式

复杂的模式匹配,匹配长字符串时,会比较慢。特别是,多个模式,并且字符串可匹配上多个模式。

可使用分开的模式和短字符串。 或者使用字符串数组,可能会快些。