在Ruby中转义字符串中的双反斜杠和单反斜杠

时间:2010-05-05 15:54:21

标签: ruby-on-rails ruby escaping backslash

我正在尝试以类似这样的格式在Windows平台上的ruby脚本中访问网络路径。

\\servername\some windows share\folder 1\folder2\

现在,如果我尝试将此作为路径使用,则无法使用。对于此脚本,没有正确转义单个反斜杠。

path = "\\servername\some windows share\folder 1\folder2\"
d = Dir.new(path)

我尝试了所有我能想到的东西来正确地逃避路径中的斜线。但是我无法摆脱那个单一的反斜杠 - 因为它具有特殊意义。我尝试单引号,双引号,转义反斜杠本身,使用替代引号,如%Q {}或%q {},使用ascii转换为char。从某种意义上讲,我没有做任何事情。 :-)现在临时解决方案是映射网络驱动器N:\指向该路径并以这种方式访问​​它,但这不是解决方案。

有没有人知道如何正确地逃避单个反斜杠?

谢谢

2 个答案:

答案 0 :(得分:22)

只需将每个反斜杠加倍,就像这样:

"\\\\servername\\some windows share\\folder 1\\folder2\\"

答案 1 :(得分:13)

试试这个

puts '\\\\servername\some windows share\folder 1\folder2\\'
#=> \\servername\some windows share\folder 1\folder2\

只要您使用单引号来定义字符串(例如,'foo'),就不需要转义单个\以下两种情况除外

  1. \\适用于单个\。因此,\\\\会为您提供所需的起始\\
  2. 路径末尾的尾随\将尝试转义结束语,因此您还需要\\

  3. 可替换地,

    您可以为自己定义一个优雅的助手。您可以将\与此类方法结合使用,而不是使用笨重的/路径分隔符:

    def windows_path(foo)
      foo.gsub('/', '\\')
    end
    
    puts windows_path '//servername/some windows share/folder 1/folder2/'
    #=> \\servername\some windows share\folder 1\folder2\
    

    甜!