From: Nobuhiro IMAI Date: 2008-08-29T22:14:44+09:00 Subject: [ruby-list:45427] Dir[] with **/ いまいです。 Dir[] に **/ を渡して再帰的なパターンマッチをさせた結果返ってくるパスっ て、順序は特に決まっていないという認識であってるでしょうか? /tmp/foo と /tmp/bar は同じ構成なのですが、 $ ./miniruby -ve'puts Dir["/tmp/{foo,bar}/app/controllers/**/*_controller.rb"]' ruby 1.9.0 (2008-08-29 revision 18923) [i686-linux] /tmp/foo/app/controllers/m_controller.rb /tmp/foo/app/controllers/m/c_controller.rb /tmp/bar/app/controllers/m/c_controller.rb /tmp/bar/app/controllers/m_controller.rb $ ./miniruby -ve' %w(/tmp/foo /tmp/bar).each{|d| Dir.chdir(d){puts Dir["app/controllers/**/*_controller.rb"]}}' ruby 1.9.0 (2008-08-29 revision 18923) [i686-linux] app/controllers/m_controller.rb app/controllers/m/c_controller.rb app/controllers/m/c_controller.rb app/controllers/m_controller.rb という挙動です。 zsh だと、どちらもパス名の順序で返ってくるようです。 % ls -1 /tmp/{foo,bar}/app/controllers/**/*_controller.rb /tmp/bar/app/controllers/m/c_controller.rb /tmp/bar/app/controllers/m_controller.rb /tmp/foo/app/controllers/m/c_controller.rb /tmp/foo/app/controllers/m_controller.rb % for d in /tmp/foo /tmp/bar; do (cd ${d} && ls -1 app/controllers/**/*_controller.rb); done app/controllers/m/c_controller.rb app/controllers/m_controller.rb app/controllers/m/c_controller.rb app/controllers/m_controller.rb 別のマシンだとどちらも zsh と同じ順序で返ってくるので、順序は不定なの かなと思いますが、どなたか真相を教えていただけないでしょうか? -- Nobuhiro IMAI Key fingerprint = F39E D552 545D 7C64 D690 F644 5A15 746C BD8E 7106