在
OptionParser的“完整示例”部分中,有一个例子详细说明了如何接受项目列表。
以下是基于该示例的示例程序。
opts.on
中的第三个参数
Array
表示应使用输入
src,dst
创建数组。 要运行此示例,您需要执行
gem install trollop
。
require 'optparse'
options = {}
OptionParser.new do |opt|
opt.on("-m src, dst", "--move src, dst", Array, "Move from src to dst") do |list|
options[:src] = list[0]
options[:dst] = list[1]
end
end.parse!
puts options
示例运行:
> ruby test.rb -m from,to
{:src=>"src", :dst=>"dst"}
>ruby test.rb -h
Usage: test [options]
-m, --move src, dst Move from src to dst
上述脚本强制使用逗号分隔选项。
如"
Ruby中真正便宜的命令行选项解析"所示,似乎有一个gem包,
trollop,可以用于命令行解析,并且非常容易使用。
下面给出了一个基于Trollop的示例程序,允许使用空格来指定具有多个值的选项。
require "trollop"
opts = Trollop::options do
banner "Command line parsing using Trollop"
opt :move, "--move src dst', Move from src to dst", :short => "-m", :long => "--move", :type => :strings
end
p opts.move
运行示例:
>ruby test.rb -m hello world
["hello", "world"]
>ruby test.rb -h
Command line parsing using Trollop
-m, --move=<s+> '--move src dst', Move from src to dst
-h, --help Show this message
两种方法的帮助输出之间存在微妙的差异。Trollop产生的帮助文本中,
--move=<s+>
并没有明确指出它需要接受两个值,因此我不得不重复命令语法描述。