微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby – 如何分割像shell这样的字符串来填充ARGV?

我想要一个 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","\"Hello","world\"","\"-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并使用它.

更新:看起来0700在Ruby 1.8中可用(谢谢Michael Khol).关于哪些特定版本有它,我得到了模棱两可的结果.

原文地址:https://www.jb51.cc/ruby/270698.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐