参考地址:https://ruby-doc.org/stdlib-2.3.3/libdoc/optparse/rdoc/OptionParser.html#method-c-new
OptionParser
参考自这个博主:https://blog.youkuaiyun.com/u010515761/article/details/40079685
- banner用来作为-h的提示信息
- on(‘-s’)表示-s后不接参数,on(‘-s NAME’)表示-s后接参数
#!/usr/bin/env ruby
require 'optparse'
options = {}
option_parser = OptionParser.new do |opts|
# 这里是这个命令行工具的帮助信息
opts.banner = 'here is help messages of the command line tool.'
# Option 作为switch,不带argument,用于将 switch 设置成 true 或 false
options[:switch] = false
# 下面第一项是 Short option(没有可以直接在引号间留空),第二项是 Long option,第三项是对 Option 的描述
opts.on('-s', '--switch', 'Set options as switch') do
# 这个部分就是使用这个Option后执行的代码
options[:switch] = true
end
# Option 作为 flag,带argument,用于将argument作为数值解析,比如"name"信息
#下面的“value”就是用户使用时输入的argument
opts.on('-n NAME', '--name Name', 'Pass-in single name') do |value|
options[:name] = value
end
# Option 作为 flag,带一组用逗号分割的arguments,用于将arguments作为数组解析
opts.on('-a A,B', '--array A,B', Array, 'List of arguments') do |value|
options[:array] = value
end
end.parse!
puts options.inspect
执行结果
$ ruby my_awesome_command.rb -h
here is help messages of the command line tool.
-s, --switch Set options as switch
-n, --name Name Pass-in single name
-a, --array A,B List of arguments
$ ruby my_awesome_command.rb -s
{:switch=>true}
$ ruby my_awesome_command.rb -n Daniel
{:switch=>false, :name=>"Daniel"}
$ ruby my_awesome_command.rb -a Foo,Bar
{:switch=>false, :array=>["Foo", "Bar"]}