简介
大家应该都用过类似*.jpg
, file[0-9].txt
之类带有通配符的表达式。将这类表达式展开成为一个匹配路径名列表的程序就被称作glob
。
早在UNIX V6中,/etc/glob就被用来展开通配符模式。现在几乎所有的shell都内置了glob。
规则
glob的通配符比正则表达式要简单的多。glob所识别的通配符只有'?', '*', '['。
'?'(不在方括号内的)匹配任意但个字符。
'*'(不在方括号内的)匹配任意串(包括空串)。
"[...]"表示字符类,表示能匹配方括号中的任意字符的字符。如果'!'紧跟在'['之后则表示不能匹配方括号中字符的字符。字符类不能为空。因此"[][!]"会匹配']', '['和'!'。
'?', '*', '['可使用反斜杆''转义。
需要注意,glob不是正则表达式。glob是用来展开路径名的,在规则上与正则表达式有很大的不同。正则表达式中常用'[^...]'来对字符类取补,但在POSIX这是未定义的。尽管有的shell确实支持这样的表达方式。
参考资料:
[1] man glob(7)