是否可以使用反引号将参数连接到命令行?

时间:2020-03-05 18:47:00  来源:igfitidea点击:

我想从我的ruby脚本执行OS命令,但是我想从ruby变量添加一个参数。

我知道可以通过使用像这样的关键字系统来实现:

#!/usr/bin/env ruby
directory = '/home/paulgreg/'
system 'ls ' + directory

但是可以通过使用"反引号或者反引号语法"实现吗?
(我的意思是使用该语法:ls)

解决方案

回答

不,这只会将ls的输出和directory的内容连接起来。

但是我们可以这样做:

#!/usr/bin/env ruby
directory = '/home/paulgreg/'
`ls #{directory}`

回答

`ls #{directory}`

并不是很安全,因为我们将遇到路径名称中包含空格的问题。

做这样的事比较安全:

directory = '/home/paulgreg/'

args = []
args << "/bin/ls"
args << directory

system(*args)

回答

尼克是对的,但不需要分段组装args:

directory = '/Volumes/Omg a space/'
system('/bin/ls', directory)