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

Rus*_*ton 0 ruby

我想从 ruby​​ 脚本调用一些系统命令,而无需 shell 摆弄东西。问题是在编码时我不知道会有多少参数。

如果我正在通过 shell,我会通过连接来构建命令行......

我曾经在 perl 中通过传递 system 和 array 以及我想要的许多参数来做到这一点。这是因为在 perl 中传递参数的方式。不出所料,Ruby 不支持这一点。

有没有办法做到这一点?

mu *_*ort 6

将参数放入数组中:

cmd = %w[ls -l -a]
Run Code Online (Sandbox Code Playgroud)

然后在调用时使用该数组system

system(*cmd)
# -----^ splat
Run Code Online (Sandbox Code Playgroud)

这与说:

system('ls', '-l', '-a')
Run Code Online (Sandbox Code Playgroud)

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

def variadic_method(*args)
  # This splat leaves all the arguments in the
  # args array
  ...
end
Run Code Online (Sandbox Code Playgroud)