Ruby + Option解析器

时间:2013-12-04 12:09:45

标签: ruby

我正在通过引用thisthis来学习ruby中的选项解析。这是我的测试代码:

#!/usr/bin/ruby
require "optparse"

options = {}

optparse = OptionParser.new do |opts|
  opts.banner = "Learning Option parsing in Ruby"

  opts.on("-i", "--ipaddress", "IP address of the server") do |ipaddr|
    options[:ipaddress] =  ipaddr
  end

    opts.on("-u", "--username", "username to log in") do |user|
      options[:username] = user
    end

    opts.on("-p", "--password", "password of the user") do |pass|
      options[:password] = pass
    end
end

optparse.parse!

puts "the IPaddress is #{options[:ipaddress]}" if options[:ipaddress]
puts "the username is #{options[:username]}" if options[:username]
puts "the password is #{options[:password]}" if options[:password]

我的目的是打印我传递给脚本的opton。但是,它不打印我通过的选项,而只是说true

# ruby getops.rb  --ipaddress 1.1.1.1
the IPaddress is true
# ruby getops.rb  --username user1
the username is true
# ruby getops.rb  --password secret
the password is true

我哪里错了?我也试过了短期选项,但结果是一样的。

2 个答案:

答案 0 :(得分:6)

如果将其更改为:

,该怎么办?
opts.on("-i", "--ipaddress IPADDRESS", "IP address of the server") do |ipaddr|
  options[:ipaddress] =  ipaddr
end

注意第二个参数中的IPADDRESS

答案 1 :(得分:3)

# Mandatory argument.
  opts.on("-r", "--require LIBRARY",
          "Require the LIBRARY before executing your script") do |lib|
    options.library << lib
  end

我发现你的第一个链接。注意“--require LIBRARY”。