2012-02-07 67 views
0

我剛剛在Ruby中使用文件,我發現了以下問題。基本壓縮文件。一般處理文件。紅寶石

執行以下行時間:

'zip -r "c:\temp\a.zip" "c:\temp\a.txt"'

從IRB我收到以下:

=> "zip -r \"c:\\temp\\a.zip\" \"c:\\temp\\a.txt\""

,絕對未壓縮文件。所以在這裏我的問題是:

  1. 爲什麼紅寶石加包裝

    \\
    圍繞文件的路徑和
    \
    跡象。如果你可以詳細說明這將是非常有用的,因爲我無法找到反斜槓信息

  2. 如何逃避這些跡象?

我的環境:

 
Windows 7 
jRuby 153 

回答

2

反斜線逃逸。

在任何情況下,如果您只是評估字符串,那只是字符串即字符串。當你使用單引號時,反斜槓只是反斜槓,而不是轉義字符。在內部,爲了打印反斜槓的字符串,它必須被轉義,所以Ruby會爲你做。

如果你把它分配給一個變量,並呼籲puts

> 'zip -r "c:\temp\a.zip" "c:\temp\a.txt"' 
=> "zip -r \"c:\\temp\\a.zip\" \"c:\\temp\\a.txt\"" 
> s = 'zip -r "c:\temp\a.zip" "c:\temp\a.txt"' 
=> "zip -r \"c:\\temp\\a.zip\" \"c:\\temp\\a.txt\"" 
> puts s 
zip -r "c:\temp\a.zip" "c:\temp\a.txt" 

你還沒有真正什麼 - you're只創建一個字符串。

如果你想執行該字符串作爲命令,你需要使用back-ticks而不是單引號。此外,Ruby和Java都是操作系統不可知的,所以你可以像普通人一樣使用正斜槓。