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

Are long option names case insensitive using OptionParser?

在以下脚本中,短选项按预期工作,长选项则不然:

#!/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 相同的输出?

是的,长选项似乎不区分大小写。我想这是约定俗成的。从未见过具有区分大小写的长名称的工具。

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

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

开始于:

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)

单个字母,"short flags" 区分大小写,正如我们在 -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}