2012-02-02 29 views

回答

8

爲了處理使用OptionParser位置參數,首先使用OptionParser解析開關,然後取從ARGV剩餘位置參數:

# optparse-positional-arguments.rb 
require 'optparse' 

options = {} 
OptionParser.new do |opts| 
    opts.banner = "Usage: #{__FILE__} [command] [options]" 

    opts.on("-v", "--verbose", "Run verbosely") do |v| 
    options[:verbose] = true 
    end 

    opts.on("--list x,y,z", Array, "Just a list of arguments") do |list| 
    options[:list] = list 
    end 
end.parse! 

上執行的腳本:

$ ruby optparse-positional-arguments.rb foobar --verbose --list 1,2,3,4,5 

p options 
# => {:verbose=>true, :list=>["1", "2", "3", "4", "5"]} 

p ARGV 
# => ["foobar"] 

dothisdothat命令可以在任何地方。該options哈希和ARGV保持不變不管:

# After options 
$ ruby optparse-positional-arguments.rb --verbose --list 1,2,3,4,5 foobar 

# In between options 
$ ruby optparse-positional-arguments.rb --verbose foobar --list 1,2,3,4,5 
+0

這樣,我不能肯定,如果'dothis'或'dothat'是第一個參數,對不對? – 2012-02-02 20:10:59

+0

是的,你是對的。你可以把它想象成'script [command] [options]'。其中命令和選項在位置上可以互換。所以它也可以是'script [options] [command]'。那對你有用嗎? – csherin 2012-02-02 20:25:12

+0

什麼是獲取可能的命令進入使用字符串的好方法?只要將它粘貼到「opts.banner」中? – Paladin 2016-11-29 13:55:08