Как передать строку "*. *" В ruby ​​в качестве параметра командной строки? - PullRequest
7 голосов
/ 07 июня 2011

код:

  #test_argv.rb
  puts "length: #{ARGV.length} "
  ARGV.each do |a|
    puts "Argument: #{a}"
  end

Если я укажу строку "*.*" (с кавычками или без) при вызове вышеупомянутого, я получу следующий вывод:

  C:\test>test_argv *.*
  length: 5
  Argument: afile.TXT
  Argument: bfile.TXT
  Argument: cfile.TXT
  Argument: dfile.TXT
  Argument: somethingelse.TXT

т.е., список файлов в c: \ test.

Другие значения, такие как "s*.*", возвращают что-то elsese.TXT, как и следовало ожидать, если бы вы выполняли файловые операции - но я нет.

Но это ведет себя так, как и ожидалось:

  C:\test>test_argv asdf
  length: 1
  Argument: asdf

Итак, мой вопрос, как я могу создать удобный для пользователя скрипт, который будет принимать "*.*" (и т. Д.) В качестве параметра командной строки?Кроме того, где это задокументировано / объяснено?

Редактировать: это происходит в Windows и Linux, 1.8.7 и 1.9.2

1 Ответ

5 голосов
/ 07 июня 2011

Возможно, вам понадобится поместить это в буквальные кавычки:

test_argv "*.*"

В кавычках следует избегать преждевременного расширения аргументов командной строки.

...