Escape double and single backslashes in a string in Ruby
I'm trying to access a network path in my ruby script on a windows platform in a format like this.
\\servername\some wi开发者_StackOverflow中文版ndows share\folder 1\folder2\
Now If I try to use this as a path, it won't work. Single backslashes are not properly escaped for this script.
path = "\\servername\some windows share\folder 1\folder2\"
d = Dir.new(path)
I tried everything I could think of to properly escape slashes in the path. However I can't escape that single backslash - because of it's special meaning. I tried single quotes, double quotes, escaping backslash itself, using alternate quotes such as %Q{} or %q{}, using ascii to char conversion. Nothing works in a sense that I'm not doing it right. :-) Right now the temp solution is to Map a network drive N:\ pointing to that path and access it that way, but that not a solution.
Does anyone have any idea how to properly escape single backslashes?
Thank you
Just double-up every backslash, like so:
"\\\\servername\\some windows share\\folder 1\\folder2\\"
Try this
puts '\\\\servername\some windows share\folder 1\folder2\\'
#=> \\servername\some windows share\folder 1\folder2\
So long as you're using single quotes to define your string(e.g., 'foo'
), a single \
does not need to be escaped. except in the following two cases
\\
works itself out to a single\
. So,\\\\
will give you the starting\\
you need.- The trailing
\
at the end of your path will tries to escape the closing quote so you need a\\
there as well.
Alternatively,
You could define an elegant helper for yourself. Instead of using the clunky \
path separators, you could use /
in conjunction with a method like this:
def windows_path(foo)
foo.gsub('/', '\\')
end
puts windows_path '//servername/some windows share/folder 1/folder2/'
#=> \\servername\some windows share\folder 1\folder2\
Sweet!
精彩评论