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
-
//
funciona a un solo/
. Entonces,////
le dará la partida//
que necesita. - 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//"