こんにちは、なかむら(う)です。

In message "[ruby-list:39336] Re: File.fnmatch    の改良について"
    on Mar.06,2004 14:52:58, <ocean / m2.ccsnet.ne.jp> wrote:
| 納得しました。情報ありがとうございました。
| BeOSのbashで確認したところ、[\*] はやはりエスケープとして
| 働いてました。[a-b-c] も、なかむらさんの仰るように [a-bc-] として働いてました。
| (fnmatch(3) もそう働いているということでいいでしょうか?)

この件に関してはそうです。


| 第一に、FNM_PATHNAME のときの [a/c] の解釈です。
| 
| bash では [a/c] は '[a' + '/' + 'c]' として解釈していて、
| 
| E:\ruby-cvs>miniruby_1_8 -e "puts File.fnmatch('[a/c]', '[a/c]', File::FNM_PATHNAME)"
| false
| 
| E:\ruby-cvs>miniruby_1_8 -e "puts File.fnmatch('[a/c]', 'a', File::FNM_PATHNAME)"
| true
| 
| という File.fnmatch の動作と異なっています。fnmatch(3) はどう振舞ってますか?

NetBSDのfnmatch(3)はRubyと同じです。


| 第二に、DOSISH は不完全な気がするので、少なくともパターンでは '/' のみとしたいのですが、
| こちらはどうでしょうか?
| 
| E:\ruby-cvs>miniruby_1_8 -e "puts File.fnmatch('a\b', 'a\b', File::FNM_PATHNAME)"
| true
| 
| E:\ruby-cvs>miniruby_1_8 -e "puts File.fnmatch('a\[b]', 'a\b', File::FNM_PATHNAME)"
| false
| 
| E:\ruby-cvs>miniruby_1_8 -e "puts File.fnmatch('a\\\[b]', 'a\b', File::FNM_PATHNAME)"
| true

パターン側もマッチ対象文字列側も / だけでいいと思ってます。
パターン側はどうしようもないですし、そういう制限があるなら無
理にマッチ対象文字列側の \ と同一視するのもめんどくさ...じゃ
なくて、紛らわしいですし。

でもこれは私がRubyスクリプト内で \ をパス区切りとしては使用し
てないからそう思うだけで、普通に \ を使用しているユーザー(と
いうのがもし存在するなら)だったら別の意見かもしれないですね。


| 第三に、FNM_PERIOD を復活させたほうがいいのでしょうか?それとも今のまま FNM_DOTMATCH でしょうか?

先の私の主張から考えると、一貫性という面からはFNM_PERIODを復
活させるべき、なんでしょうねえ。

File.glob_match? ができれば、そっちは FNM_PERIOD|FNM_PATHNAME
相当なんだから、File.fnmatchはfnmatch(3)との互換性を高めても
かまわない、のかなあ...

というわけでこれについては結論なしです ^^;


それでは。
-- 
U.Nakamura <usa / garbagecollect.jp>