我想从ruby脚本中调用一些系统命令,而不用外壳弄弄东西。问题是在编码时我不知道会有多少个args。
如果要通过外壳,我可以通过串联建立命令行...
我以前在perl中通过向系统和数组传递我想要的许多参数来做到这一点。之所以可行,是因为在perl中传递参数的方式。毫无疑问,Ruby不支持。
有没有办法做到这一点?
答案 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中,然后将其分配给该参数。>