通过命令行传递数组

时间:2012-11-08 16:51:21

标签: ruby

我有一个名为foobar.rb的Ruby脚本,它带有多个参数。

我希望(可选)能够在命令行上指定一个整数数组,并能够将它们作为单个选项进行处理。我认为我的命令行看起来像这样:

foobar.rb [1,2,3]

在1-10的范围内,我对Ruby的了解可能在6左右。足以知道可能有一种简单的方法来实现这一目标,但还不足以知道它是什么,甚至不知道在哪里查看文档

如何解析这个以逗号分隔的整数列表,最后在代码中使用Array?如果存在这样的解决方案,我更喜欢一种不需要添加任何外部库的idomatic,1-liner解决方案。

2 个答案:

答案 0 :(得分:10)

我会自己使用optparse,就像这样:

require 'optparse'

options = {}

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

  opts.on("-a", "--argument a,b,c", Array, "Array of arguments") { |a| options[:array] = a.map { |v| v.to_i } }
end.parse!

puts options.inspect

  => {:array=>["1", "2", "3", "4"]}

答案 1 :(得分:3)

如果你使用bash作为你的终端,这应该有效:

integer_array = ARGV[0].scan(/\d/).map(&:to_i) # => Array containing 1,2,3

尝试使用zsh并崩溃,因为zsh尝试解释命令行上的[]

对于zsh,你必须使用

foobar.rb "[1,2,3]"