我刚接触Ruby中的文件,我发现了以下问题。
执行以下行时:
'zip -r "c:\temp\a.zip" "c:\temp\a.txt"'来自IRB的
我收到以下内容:
=> "zip -r \"c:\\temp\\a.zip\" \"c:\\temp\\a.txt\""
并且肯定文件未压缩。所以我的问题是:
为什么ruby会在文件路径和
\\符号周围添加包装
\。如果你能详细说明这将是非常有用的,因为我无法找到关于反斜杠的信息
如何摆脱这些迹象?
我的环境:
Windows 7 jRuby 153
答案 0 :(得分: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"
你实际上并没有做任何事情 - 你只是在创建一个字符串。
如果你想执行字符串作为命令,你需要使用反向标记,而不是单引号。此外,Ruby和Java都与操作系统无关,因此您可以像普通人一样使用正斜杠。