ruby-on-rails ruby escaping backslash

ruby on rails - Escape barras invertidas dobles y sencillas en una cadena en Ruby



ruby-on-rails escaping (2)

Estoy intentando acceder a una ruta de red en mi script ruby ​​en una plataforma de Windows en un formato como este.

//servername/some windows share/folder 1/folder2/

Ahora, si trato de usar esto como una ruta, no funcionará. Las barras invertidas únicas no se escapan correctamente para este script.

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

Intenté todo lo que podía pensar para escapar correctamente de las barras en el camino. Sin embargo, no puedo escapar de esa única barra invertida, debido a su significado especial. Intenté comillas simples, comillas dobles, escapándome con una barra invertida, usando comillas alternativas como% Q {} o% q {}, usando ascii para convertir caracteres. Nada funciona en el sentido de que no lo estoy haciendo bien. :-) En este momento, la solución temporal es asignar una unidad de red N: / apuntando a esa ruta y acceder a ella de esa manera, pero eso no es una solución.

¿Alguien tiene alguna idea de cómo escapar adecuadamente las barras invertidas individuales?

Gracias


Prueba esto

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

Mientras esté utilizando comillas simples para definir su cadena (por ejemplo, ''foo'' ), no es necesario que se escape un solo / . excepto en los siguientes dos casos

  1. // funciona a un solo / . Entonces, //// le dará la partida // que necesita.
  2. El final al final de su ruta intentará escapar de la cita de cierre, por lo que también necesitará un // allí.

Alternativamente,

Podrías definir un ayudante elegante para ti mismo. En lugar de usar los separadores de ruta / clunky, puede usar / junto con un método como este:

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

¡Dulce!


Solo doble cada barra invertida, así:

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