2012-06-04 47 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