Bash
有两种类型的模式匹配,Glob
和Regex
. 一般使用规则似乎是 1)glob
搜索文件名更简单 2)regex
用于搜索文本。
Glob
在前面regex
使用元字符,在结尾使用元字符pattern
。
Glob Regex
?(pattern) (pattern)?
*(pattern) (pattern)*
+(pattern) (pattern)+
因此,我很难理解文件如何与通配符(例如*.sh
)匹配。通配符与 glob 模式有什么不同吗?据我所知,搜索模式*.sh
不包含匹配 . 之后的任何字符的元字符*
。
通配符是 glob 模式的一部分。最简单
*
的?
是通配符,也是 glob 模式。下面是一些简单的 glob:您在问题中列出的 glob 模式是扩展的glob 模式。因为
bash
它们在[[ "$var" == {pattern} ]]
构造中处于活动状态,但仅在extglob
启用时才可用于文件名匹配:该模式
*.sh
使用*
将匹配零个或多个字符的通配符。请记住,glob 不是正则表达式(普通的或扩展的),但它们是等价的:请注意,要匹配“一”或“二”的普通 RE 需要标出括号和分隔符,即
^\(one\|two\)$
,因为它们不包括在内。相反,扩展正则表达式确实包括这些运算符,即^(one|two)$