Документация для Ruby's GetoptLong создала у меня впечатление, что он удалит проанализированные параметры из ARGV. Вот этот отрывок:
Например, если -a не требует аргумента и -b необязательно принимает аргумент,
Разбор '-a один -b два три' приведет к тому, что (-a ',' ') и (' -b ',' two ') будут обработаны как пары option / arg, а' one ',' three '- осталось в АРГВ.
Однако, похоже, это не так. Вот моя программа:
#!/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
(я проверил, что я на ruby 1.9.2.)
Я мог бы удалить опции вручную, но это было бы немного головной болью, поскольку, в зависимости от того, как вы их передаете, каждый мог занять один или два слота в массиве (--base=foo
против --base foo
). Было бы намного удобнее, если бы GetoptLong мог удалить их для меня. Есть ли способ сделать это?