我想要一个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)。我得到的结果模棱两可的具体版本有它。