我将参数传递给我的ruby文件时遇到了麻烦。 IE,
OptionParser.new do |opts|
opts.banner = 'Usage: mp3split.rb [options]'
opts.on('-f', '--filename fName1,fName2,fName3', Array, 'absolute or relative pathes to file') { |f| options[:filenames] = f }
end.parse!
这种方法要求我编写这个命令:
ruby mp3split.rb --filename fursov_13.mp3,fursov_14.mp3,fursov_14_2.mp3,fursov_15.mp3,fursov_16.mp3,fursov_17.mp3
但是我希望通过这个得到阵列:
ruby mp3split.rb --filename fursov_13.mp3 fursov_14.mp3 fursov_14_2.mp3 fursov_15.mp3 fursov_16.mp3 fursov_17.mp3
如何实现此功能?我在文档中找不到任何有用的信息。
答案 0 :(得分:1)
OptionParser
你做不到。但是,有一种解决方法,当您需要处理这种方式的唯一列表时,您不会将其他参数传递给脚本。 OptionParser
在处理输入之前用空格拆分输入。解析后,未键控的参数保留在ARGV
全局常量中。假设满足上述所有条件,我们就去:
OptionParser.new do |opts|
options[:filenames] = []
opts.banner = 'Usage: mp3split.rb [options]'
opts.on('-f', '--filename fName1 fName2 fName3', Array,
'absolute or relative pathes to file') do |f|
options[:filenames] |= [*f]
end
end.parse!
options[:filenames] |= ARGV
我显然修复了代码中的另一个小错误:options[:filenames]
每次出现-f
切换时OptionParser
都应追加而不是覆盖 {{1} }}支持script -f f1 -f f2 -f f3
。