我需要解析一个命令行,比如

  script.rb <mandatory filename> [options]

optparse美元.

当然,我可以编写一些自定义代码来处理文件名,然后将ARGV传递给optparse,但也许有一种更简单的方法可以做到这一点?

编辑:还有另一种破解方法来解析这样的命令行,那就是将['--mandatory-filename'] + ARGV传递给optparse,然后处理--mandatory-filename选项.

推荐答案

先用OPTPASE扫描parse!,然后扫描ARGV,如果ARGV为空,则上升.就像这样:

op.parse!
filename = ARGV.pop
raise "Need to specify a file to process" unless filename

强制文件名将不会由OptionParser处理,并将留在ARGV中供您使用-如果没有,只需手动提高.

Ruby相关问答推荐

Ruby:对于不存在的键,使用缺省值Hash在Hash中存储Hash

在 Ruby 中,如何从派生类中重写同一方法的不同方法调用基类方法?

Ruby:一个方法可以返回不同类型的对象吗?

将数组转换为哈希,其中键是索引

如何在加载文件时禁用重新定义常量的警告

独立于 Rails 使用 HAML 文件中的布局

Simple_form:删除带有标签的内联复选框的外部标签

冒号:和粗箭头=>有什么区别

Ruby 的 Object#taint 和 Object#trust 方法是什么?

Ruby:如何计算相对于另一个路径的路径?

为什么 Matz Select 在 Ruby 中默认使字符串可变?

为什么 Ruby 使用 respond_to?而不是 responds_to?

扩展self 和module_function一样吗?

将haml标签放入link_to helper

如何通过一组新的给定键更改哈希的所有键

如何删除Ruby中数组中满足条件的所有元素?

在 Ruby 中定义 [方括号] 方法是如何工作的?

在Ruby中实现平等的正确方法是什么

如何让 Ruby 1.9 成为 Ubuntu 上的默认 Ruby?

Ruby:如何计算一个字符串在另一个字符串中出现的次数?