如何将字符串"*.*"作为命令行参数传递给ruby?

dav*_*vej 7 ruby argv

码:

  #test_argv.rb
  puts "length: #{ARGV.length} "
  ARGV.each do |a|
    puts "Argument: #{a}"
  end
Run Code Online (Sandbox Code Playgroud)

如果我"*.*"在调用上面的内容时提供字符串(带或不带引号),我会得到以下输出:

  C:\test>test_argv *.*
  length: 5
  Argument: afile.TXT
  Argument: bfile.TXT
  Argument: cfile.TXT
  Argument: dfile.TXT
  Argument: somethingelse.TXT
Run Code Online (Sandbox Code Playgroud)

即,c:\ test中的文件列表.

其他值,比如"s*.*"返回somethingelse.TXT,就像你在做文件操作时所期望的那样 - 但我不是.

但这表现得如预期的那样:

  C:\test>test_argv asdf
  length: 1
  Argument: asdf
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,我如何制作一个用户友好的脚本,将"*.*"(等)作为命令行参数?另外,这在哪里记录/解释?

编辑:这发生在Windows和Linux,1.8.7和1.9.2上

tad*_*man 5

您可能需要将其放入文字引号中:

test_argv "*.*"
Run Code Online (Sandbox Code Playgroud)

引号应避免让命令行参数过早地扩展.

  • +1.OP看到的行为是[全球](http://en.wikipedia.org/wiki/Glob_%28programming%29)由shell完成 (3认同)