2012-06-04 20 views
4

我注意到红宝石的fnmatch功能的一个令人惊讶的行为:通配符**如何在fnmatch中工作?

File.fnmatch('**.rb', 'main.rb')     #=> true 
File.fnmatch('**.rb', './main.rb')     #=> false 

至于在the Ruby reference被解释的,**将:

匹配目录递归或宽泛文件。

那么为什么不扩展和匹配./main.rb

回答

5

此行为实际上是documented,但很容易错过。埋在它的例子说:

通配符默认情况下不符合领先期。

为了实现这种行为,你需要指定文件:: FNM_DOTMATCH标志:

File.fnmatch('**.rb', './main.rb', File::FNM_DOTMATCH) 
=> true