4

fnmatchRuby の関数の驚くべき動作に気付きました。

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

Ruby リファレンスで説明されている限り、次のように**なります。

ディレクトリを再帰的に一致させるか、ファイルを拡張的に一致させます。

では、なぜ展開して一致しないの./main.rbですか?

4

1 に答える 1

5

この動作は実際に文書化されていますが、見逃しがちです。それが言う例に埋もれている:

ワイルドカードは、デフォルトでは先頭のピリオドと一致しません。

この動作を有効にするには、File::FNM_DOTMATCHフラグを指定する必要があります。

File.fnmatch('**.rb', './main.rb', File::FNM_DOTMATCH)
=> true
于 2012-06-04T15:42:08.203 に答える