2012-11-13 81 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