2012-11-13 44 views
0

我正在阅读Ruby的system方法here的文档。如果我输入-P /public/google(指定要下载的目录)的选项,那么它是作为一个参数还是两个参数计算的呢?系统调用中的参数

回答

1

它算作两个。由于两者之间存在空间,shell会将其分割为-P/public/google(如果已使用参数,即使在ruby中,shell也会将这些参数作为单独的参数传递给脚本)。

+0

drderp,谢谢你的回答! “如果你曾经参与过争论,即使是在红宝石中”,你的意思是什么? –

+0

@MikaH。在ruby和其他大多数编程语言中,如果您从命令行运行脚本,如'some_file some args'或'ruby-some_file.rb some args',您将可以通过一些数组访问这些参数分类。在红宝石的情况下,它是'ARGV'。 –

3

它实际上取决于您使用哪种形式的系统。如果你传递一个字符串命令,鼻翼:

system 'somecmd -P /public/google' 

的命令字符串将通过将解析它,令牌化上导致两个参数somecmd空白壳来解释。同样,如果你使用的参数列表形式,你打破字符串成空格分隔标记,如:

system 'somecmd', '-P', '/public/google' 
system *%w{ somecmd -P /public/google } 

但是如果你使用的参数列表形式,并发送-P /public/google作为一个单独的参数会出现somecmd为一个嵌入空白的参数:

system 'somecmd', '-P /public/google' 
+0

感谢您的回答! 'system'somecmd','-P/public/google'(具有一个参数的版本)会产生与'system'somecmd -P/public/google''(带两个参数的版本)相同的结果吗? –

+0

@MikaH。结果真的取决于'somecmd'对arg标记化的敏感程度以及意义如何变化;一般来说,getopts风格的选项解释可能会比'-P'​​,'/ public/google''完全不同于'-P/public/google'。 'touch'可能并不在意。 – dbenhur