glob | 路径名文件名的匹配和填充
简介
大家应该都用过类似 *.jpg
, file[0-9].txt
之类带有通配符的表达式。将这类表达式展开成为一个匹配路径名列表的程序就被称作glob
。
早在UNIX V6中,/etc/glob就被用来展开通配符模式。现在几乎所有的shell都内置了glob。
规则
glob的通配符比正则表达式要简单的多。glob所识别的通配符只有 ?
, *
, [
。
?
匹配任意单个字符。例如,ls ???
会列出所有文件名为三个字符的目录和文件。
*
匹配任意串(包括空串)。比如:*.jpg
[...]
表示字符类,表示能匹配到方括号中的任意字符的字符。[ak]*
表示字符 a 或 k 开头的所有文件。
如果 !
紧跟在 [
之后则表示不能匹配方括号中字符的字符,[!...]
类似于正则表达式中的 [^...]
。[!ak]*
表示不以字符 a 或 k 开头的所有文件。
字符类不能为空,直接使用 []
会被理解为字面意义。
字符类中可以使用 -
表达范围,类似于正则表达式。[a-z]
表示所有小写字符。
如果要表达 ?
, *
, [
字符本身,需要使用反斜杆 \
转义。
glob不是正则表达式。glob是用来展开路径名的,在规则上与正则表达式有很大的不同。
参考资料:
[1] man glob(7)