2
Ruby的GetoptLong文档给我的印象是它会从ARGV中删除解析的选项。这里是有问题的一段话:Ruby GetoptLong修改ARGV?
例如,如果-a不需要论证和可选-b需要一个参数, 解析“-a一个-b二三”会导致(“-a” ,'')和('-b','two')作为选项/参数对处理,'1','3'留在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。)
我可以手动删除选项,但这会有点让人头痛,因为根据你通过它们的方式,每个阵列可能占用阵列中的一个或两个插槽(--base=foo
与--base foo
)。如果GetoptLong能够为我移除它会更方便。有没有办法做到这一点?
是的,这工作!我同意,这是相当恶心。唉:我想一个不好的解决方案比没有更好,非常感谢它找到它!! 只是fyi,我认为它可能会修改ARGV,因为这是Perl Getopt :: Long类的功能是什么,只是一种疯狂的猜测 – Joyce 2011-05-26 02:15:44
也许这是由于底层的C库实现引起的,但它本质上非常不明显。 – DGM 2011-05-26 12:16:07