山本です。

今、fnmatch の仕様を確認しています。それで質問なのですが、

  E:\ruby-cvs\ruby>miniruby -ve "puts File.fnmatch('[', '[')"
  ruby 1.9.0 (2004-02-18) [i386-bccwin32]
  false

  E:\ruby-cvs\ruby>miniruby -ve "puts Dir.glob('[')"
  ruby 1.9.0 (2004-02-18) [i386-bccwin32]
  [

fnmatch は

  1. '[' があるので range() を呼ぶ
  2. ']' がないのでマッチ失敗

としているのですが、glob は

  1. has_magic("[") を呼ぶ
  2. ']' のない '[' はマジックではないので PLAIN とする
  3. PLAIN なので、単に Compare() => '[' にマッチする

と処理しています。

fnmatch は MAGIC として、glob は PLAIN として扱っていて
一貫性がないと思うのですが、'[' に対応する ']' がないときの
解釈はどうあるべきでしょうか?