RubyのGetoptLongのドキュメントは、解析されたオプションをARGVから削除するという印象を私に与えました。問題の箇所は次のとおりです。
たとえば、-aが引数を必要とせず、-bがオプションで引数を取る場合、'-a one -b two three'を解析すると、('-a'、'')および('-b'、'two ')オプション/引数のペアとして処理され、' one'、'three'がARGVに残されます。
ただし、そうではないようです。これが私のプログラムです:
#!/usr/bin/env ruby
require "getoptlong"
opts = GetoptLong.new(
["--start", "-s", GetoptLong::REQUIRED_ARGUMENT],
["--base", "-b", GetoptLong::REQUIRED_ARGUMENT]
)
puts ARGV
そしてここに出力があります:
$ number-photos --start 2 --base foo *
--start
2
--base
foo
aac-to-mp3
backup-wp-uploads
exiv-webcam-imgs
get-updates
music-to-lily
number-photos
ogg-to-mp3
rename-music
restore-uploads
resymlink
sprints
sync-jt
sync-st
timestamp
unix-names
(私はルビー1.9.2を使用していることを確認しました。)
オプションを手動で削除することもできますが、オプションを渡す方法に応じて、それぞれが配列内の1つまたは2つのスロットを占有する可能性があるため(--base=foo
vs. --base foo
)、これは少し頭痛の種になります。GetoptLongが私のためにそれらを削除できれば、はるかに便利です。これを行う方法はありますか?