我注意到fnmatch
Ruby 函数的一个令人惊讶的行为:
File.fnmatch('**.rb', 'main.rb') #=> true
File.fnmatch('**.rb', './main.rb') #=> false
至于Ruby 参考中的解释,**
将:
递归匹配目录或扩展文件。
那么为什么它不扩展和匹配./main.rb
呢?
这种行为实际上已记录在案,但很容易错过。埋在它说的例子中:
默认情况下,通配符与前导句点不匹配。
要启用此行为,您需要指定File::FNM_DOTMATCH标志:
File.fnmatch('**.rb', './main.rb', File::FNM_DOTMATCH)
=> true