带有可变数量参数的Ruby调用系统或exec

时间:2018-10-17 02:23:05

标签: ruby

我想从ruby脚本中调用一些系统命令,而不用外壳弄弄东西。问题是在编码时我不知道会有多少个args。

如果要通过外壳,我可以通过串联建立命令行...

我以前在perl中通过向系统和数组传递我想要的许多参数来做到这一点。之所以可行,是因为在perl中传递参数的方式。毫无疑问,Ruby不支持。

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:4)

将参数放入数组中

cmd = %w[ls -l -a]

,然后在调用system时展开该数组:

system(*cmd)
# -----^ splat

这与说的一样:

system('ls', '-l', '-a')

调用方法时,相同的语法用于接受可变数量的参数:

def variadic_method(*args)
  # This splat leaves all the arguments in the
  # args array
  ...
end

答案 1 :(得分:0)

这可能是您所指的吗?如图所示:

https://ruby-doc.com/docs/ProgrammingRuby/html/tut_methods.html

  

但是,如果您想传递可变数量的参数,或者想将多个参数捕获到单个参数中怎么办?在``正常''参数之后的参数名称之前放置星号即可做到这一点。

     

def varargs(arg1,* rest)     “得到了#{arg1}和#{rest.join(',')}”   结束

     

varargs(“ one”)»“获得第一和”

     

varargs(“ one”,“ two”)»“得到一和二”

     

varargs“一个”,“两个”,“三个”»“得到第一和第二,三个”

     

在此示例中,第一个参数照常分配给第一个方法参数。但是,下一个参数以星号为前缀,因此所有其余参数都捆绑到一个新的Array中,然后将其分配给该参数。>