Ruby:将ARGV转换为字符串

3

问题: 在 Ruby 中是否有一种简单的方法打印出一个数组,使其元素以空格分隔?

细节:

我想使用 Ruby 对命令进行基准测试并运行该命令。例如:

 script.rb ./command_name arg1 arg2 arg3 ...

例如:

 script.rb ls -lh

应该运行ls -lh。我尝试使用以下方式进行:

require 'benchmark'
puts Benchmark.measure{system(ARGV.to_s)}

(注意,本问题忽略基准测试,我只是包含它,因为这就是我使用它的原因)但这不起作用,因为ARGV被打印时没有空格。例如ls -lh变成了ls-lh。显然,我可以通过解析ARGV数组并在循环中在元素之间插入空格来创建自己的字符串。但我认为有一个更优雅的Ruby解决方案,但我还没有能够找到一个,所以我想知道是否有人有建议。

2个回答

7

[更新]

你应该使用 l0b0 的答案

[原始答案]

你可以使用 join 方法 轻松地将数组元素连接在一起。ARGV 是一个数组。

ARGV.join(" ")

1
如果您希望在任何参数中使用空格,您需要对它们进行转义:require 'shellwords'然后escaped_args = ARGV.map{|arg| Shellwords.escape arg}.join ' ' - hammady

4
为了生成可重用的参数字符串:
ARGV.map{|arg| Shellwords.escape arg}.join(' ')

这是一个比我的更好的答案,应该被标记为已接受。不要忘记 require 'shellwords' - Michelle Tilley
请注意,您还可以使用Shellwords.shelljoin(ARGV)或(一旦您require 'shellwords'ARGV.shelljoin - Michelle Tilley
我在Vagrantfile中使用了这个,不需要require任何东西。不过不知道是否适用于普通的Ruby。 - l0b0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接