From: "U.Nakamura" Date: 2004-03-06T16:07:43+09:00 Subject: [ruby-list:39337] Re: File.fnmatch の改良について こんにちは、なかむら(う)です。 In message "[ruby-list:39336] Re: File.fnmatch の改良について" on Mar.06,2004 14:52:58, 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