我想要一个ruby方法或者一个正则表达式,它允许我将一个命令行参数字符串拆分成一个类似argv的数组。我的要求类似于this question,但在ruby中。
我正在为一个使用trollop处理命令行输入的ruby程序编写单元测试(尽管这个问题对于任何其他选项解析器都是一样的)。
我要测试的方法如下:

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\""]

最佳答案

如果使用1.9,则存在Shellwords。如果您没有使用1.9,但有rails,那么您将从rails获得Shellwords。在这两种情况下,您都可以使用Shellwords.shellwords来解析字符串,就像posix shell那样:

>> Shellwords.shellwords("Where is 'pancakes house'?")
=> ["Where", "is", "pancakes house?"]

如果您没有rails或1.9,那么您可以从rails中获取shellwords.rb并使用它。
更新:Ruby1.8中似乎提供了Shellwords(谢谢MichaelKhol)。我得到的结果模棱两可的具体版本有它。

08-16 01:34