Как я могу разделить строку, подобную оболочке, для заполнения ARGV?

Мне нужен либо метод Ruby, либо регулярное выражение, которое позволит мне разделить строку аргументов командной строки на массив типа ARGV. То, что я задаю, похоже на этот вопрос , но на Ruby.

Я пишу модульные тесты для программы Ruby, которая обрабатывает ввод командной строки с помощью Trollop (хотя этот вопрос будет таким же для любой другой синтаксический анализатор параметров).

Метод, который я хочу протестировать, выглядит так:

def parse_args(args)
  Trollop::options(args) do
    # ... parse options based on flags
  end
end

В моей программе я вызываю parse_args (ARGV) . В моем тесте я думал, что могу просто передать строку, разделенную пробелами, но это не поведение ARGV. Сравните следующее:

./argv_example.rb -f -m "Hello world" --extra-args "-vvv extra verbose"
=> ["-f", "-m", "Hello world", "--extra-args", "-vvv extra verbose"]

'-f -m "Hello world" --extra-args "-vvv extra verbose"'.split
=> ["-f", "-m", "\"Hello", "world\"", "--extra-args", "\"-vvv", "extra", "verbose\""]

8
задан Community 23 May 2017 в 11:59
поделиться