使用OptionParser的长选项名称是否不区分大小写?

时间:2015-02-13 12:18:07

标签: ruby optparse

在下面的脚本中,短选项按预期工作,长选项不是:

#!/usr/bin/env ruby
require 'optparse'

optparse = OptionParser.new do|opts|
   opts.on( '-h', '--help', 'Display standard help') do puts opts    end
   opts.on( '-H', '--Help', 'Display other help'   ) do puts 'Help!' end
end
optparse.parse!

以下是运行时的结果:

$ ./test -h
Usage: t [options]
-h, --help                       Display standard help
-H, --Help                       Display other help
$ ./test -H
Help!
$ ./test --help
Help!
$ ./test --Help
Help!

有没有办法让--help生成与-h相同的输出?

2 个答案:

答案 0 :(得分:2)

是的,似乎长选项不区分大小写。按照惯例,这是我想象的。从未见过具有区分大小写的长名称的工具。

参见来源:https://github.com/ruby/ruby/blob/b4974e71dcb32d430d7d686c5de247218991ec6c/lib/optparse.rb#L1408

您可以复制和修改OptionParser的来源,但您可能不应该这样做。 :)

答案 1 :(得分:1)

从:

开始
require 'optparse'

options = {}
OptionParser.new do|opts|
  opts.on( '-f', '--foo', 'Display standard help') { |o| options[:foo] = o }
  opts.on( '-F', '--FOO', 'Display other help'   ) { |o| options[:FOO] = o }
end.parse!

puts options

这些示例可能有助于理解:

OptionParser已定义-h--help

$ ruby test.rb -h
Usage: test [options]
    -f, --foo                        Display standard help
    -F, --Foo                        Display other help

$ ruby test.rb --help
Usage: test [options]
    -f, --foo                        Display standard help
    -F, --Foo                        Display other help

-H尚未定义,因此您可以将其用作区分大小写选项,以获得扩展或辅助帮助:

$ ruby test.rb -H
test.rb:7:in `<main>': invalid option: -H (OptionParser::InvalidOption)

单个字母,&#34;短旗&#34;区分大小写,正如我们在-H看到的那样:

$ ruby test.rb -f
{:foo=>true}
$ ruby test.rb -F
{:FOO=>true}

长标志不区分大小写:

$ ruby test.rb --foo
{:FOO=>true}
$ ruby test.rb --FOO
{:FOO=>true}