Ruby 命令行选项


Ruby 命令行选项

命令行选项是一种程序接受用户指令的方式。Ruby 也提供了处理命令行选项的库,可通过在参数前加上“-”或“–”来指定选项。如“ls -l”,其中“l”是选项。

OptionParser 类

OptionParser 类用于解析命令行选项,解析结果会保存在 @options 实例变量中。OptionParser 用于短选项(-l)和长选项(–long-option)的解析,在解析空格和等号前提供更严格的语法。

OptionParser 类包含以下组件和示例:

参数要求

OptionParser.new() 方法可以接受一个参数 Hash,主要有如下四种:

  1. :banner => 帮助信息。如果没有则返回默认的帮助信息。
  2. :version => 版本输出信息,通常以 Ruby 语法中的单引号括起来。
  3. :summary_width => 内建的摘要和摘要段落的宽度限制。缺省时为32。可提升可读性。
  4. :option_help_width => 选项帮助的最大宽度。缺省时为24。可提升可读性。

示例代码:

require “optparse”

options = {}
OptionParser.new do |opts|
  opts.banner = “Usage: example.rb [options]”
  opts.on(“-v”, “—[no-]verbose”, “Run verbose”) do |v|
    options[:verbose] = v
  end
  # Other options will be added here as needed
end.parse!

p options

长短选项

OptionParser 可以指定短选项(参数以“-”开头)和长选项(参数以“—”开头),同时支持多个短选项的集合。选项后面可以跟一个必需的参数,用 = 或空格隔开;也可以跟一个可选的参数,用等号加?标记或双冒号“::”表示。多个选项之间加逗号。示例代码:

require “optparse”

options = {}
OptionParser.new do |opts|
  opts.on(“-f”, “—file FILENAME”, “Input file”)
  opts.on(“-v”, “—[no-]verbose”, “Run verbose”) { |v| options[:verbose] = v }
  opts.on(“-t”, “—tag [TAG]”, “Additional tags”, /COMMA_HYPHENIZED_LIST/ )
  opts.on(“-n”, “—number NUMBER”, Integer)
end.parse!

p options

分组选项

OptionParser 可以按组分类选项,首先在 OptionParser 实例上调用 #separator 方法来添加分隔线。然后使用on() 方法添加选项。

示例代码:

require “optparse”

options = {:verbose => false, :type => “normal”}
OptionParser.new do |opts|
  opts.banner = “Usage: #{$PROGRAM_NAME} [options]”
  
  opts.separator “Common options:”

  # 添加常用选项
  opts.on(“-v”, “—[no-]verbose”, “Run verbose”) do |v|
    options[:verbose] = v
  end

  # 添加其他选项
  opts.separator “Specific options:”
  opts.on(“-t”, “—type TYPE”, [:normal, :special], “Test type”) do |t|
    options[:type] = t
  end
end.parse!

p options

帮助信息

OptionParser 可以自动生成帮助信息。只要在选项定义完毕后实例调用绑定的 Help 选项即可。示例代码:

require “optparse”

options = {}
OptionParser.new do |opts|
  opts.banner = “Usage: #{$PROGRAM_NAME} [options]”

  # 添加选项
  opts.on(“-v”, “—[no-]verbose”, “Run verbose”) do |v|
    options[:verbose] = v
  end
end.parse!

puts opts

总结

本文主要介绍了 OptionParser 类的组成部分,其中包括:参数要求、长短选项、分组选项、帮助信息。使用 OptionParser 类可对命令行选项进行有效处理并得到处理结果,使程序更加易于操作和使用。