必需和可選的命令列選項

如果你沒有尋找任何過於複雜的東西,手動解析命令列相對容易:

# Naive error checking
abort('Usage: ' + $0 + ' site id ...') unless ARGV.length >= 2

# First item (site) is mandatory
site = ARGV.shift

ARGV.each do | id |
  # Do something interesting with each of the ids
end

但是當你的選項開始變得更復雜時,你可能需要使用選項解析器,例如, OptionParser

require 'optparse'

# The actual options will be stored in this hash
options = {}

# Set up the options you are looking for
optparse = OptionParser.new do |opts|
  opts.banner = "Usage: #{$0} -s NAME id ..."

  opts.on("-s", "--site NAME", "Site name") do |s|
    options[:site] = s
  end

  opts.on( '-h', '--help', 'Display this screen' ) do
    puts opts
    exit
  end
end

# The parse! method also removes any options it finds from ARGV.
optparse.parse!

還有一個非破壞性的 parse,但是如果你計劃使用 ARGV 中剩下的東西,那麼它就沒用了。

OptionParser 類沒有辦法強制執行強制引數(例如本例中的 --site)。但是你可以在執行 parse! 後自己檢查:

# Slightly more sophisticated error checking
if options[:site].nil? or ARGV.length == 0
  abort(optparse.help)
end

有關更通用的強制選項處理程式,請參閱此答案 。如果不清楚,除非你不遺餘力地強制要求,否則所有選項都是可選的。