我想要一个Ruby方法或一个正则表达式,它允许我将一个命令行参数字符串拆分为一个类似ARGV的数组。我问的是类似于this question,但用的是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\""]发布于 2011-05-20 14:34:45
如果你使用的是1.9,那就是Shellwords。如果您使用的不是1.9,但有Rails,那么您将从Rails获得Shellwords。在这两种情况下,都可以像POSIX shell一样使用Shellwords.shellwords解析字符串:
>> Shellwords.shellwords("Where is 'pancakes house'?")
=> ["Where", "is", "pancakes house?"]如果您没有Rails或1.9,那么您可能只需要从Rails获取shellwords.rb并使用它。
Ruby :看起来Shellwords在 1.8中是可用的(谢谢Michael Khol.)。我得到的结果是模棱两可的,关于哪个特定的版本有它。
https://stackoverflow.com/questions/6067993
复制相似问题