如何使用反斜杠gsub斜杠"/"并在ruby中斜杠"\ /"

Ban*_*ank 3 ruby gsub

我尝试通过ruby gsub命令修改"/foo/bar/dir""\/foo\/bar\/dir".

我在irb中测试它的结果是

x = "/foo/bar/dir"

x.gsub("/","\/")

=> "/foo/bar/dir"

x.gsub("/","\\/")

=> "\\/foo\\/bar\\/dir"
Run Code Online (Sandbox Code Playgroud)

是否可以用gsub将"/"替换为"/"?


问题来源:

我尝试执行"string in command line","real_path"是我的变量

real_path = "/home/me/www/idata"

path = real_path.gsub("/","\\/")

=> \\/home\\/me\\/www\\/idata 

# But what I expect is \/home\/me\/www\/idata

run "sed 's/SHARE_PATH/#{path}/g' #{path}/config/sphinx.yml > #{path}/config/sphinx.tmp.yml"
Run Code Online (Sandbox Code Playgroud)

"run"命令的结果是

"sh -c 'sed '\''s/SHARE_PATH/\\/home\\/me\\/www\\/idata\\/shared/g .... "
Run Code Online (Sandbox Code Playgroud)

我需要的只是一个反斜杠

"sh -c 'sed '\''s/SHARE_PATH/\/home\/me\/www\/idata\/shared/g .... "
Run Code Online (Sandbox Code Playgroud)

"跑"是卡皮斯特拉诺的命令

我的解决方案是

使用单引号而不是像这样的双引号

path = real_path.gsub("/",'\/') 
Run Code Online (Sandbox Code Playgroud)

Daw*_*wid 8

你写:

x = "/foo/bar/dir"
x.gsub("/","\\/")
=> "\\/foo\\/bar\\/dir"
Run Code Online (Sandbox Code Playgroud)

所以你做了之前问过的事.x.gsub("/","\\/")实际上是评估"\/foo\/bar\/dir"但是irb打印inspect方法的返回值而不是to_s.

编辑:你的意思是

real_path.gsub("/","\/")
Run Code Online (Sandbox Code Playgroud)

不是

real_path.gsub("\/","\/")
Run Code Online (Sandbox Code Playgroud)

无论如何输出是正确的 - 你改变/\/所以你有

"sh -c 'sed '\''s/SHARE_PATH/\/home\/me\/www\/idata\/shared/g'\'' .... "`
Run Code Online (Sandbox Code Playgroud)

代替

`"sh -c 'sed '\''s/SHARE_PATH//home/me/www/idata/shared/g'\'' .... "`
Run Code Online (Sandbox Code Playgroud)

结果与irb的结果不同(注意缺少加倍的反斜杠).

对于路径操作,我建议使用File.join(文档)

顺便说一句:为什么你这样改变路径? (1)

Edit2:你为什么要求将"/"更改为"/"但是写下面一行?

path = real_path.gsub("\/","\\/") 
Run Code Online (Sandbox Code Playgroud)

你想要实现什么目标?你对问题的回答是(1)什么?

EDIT3:

开始了:

>> real_path = "/foo/bar/dir"
=> "/foo/bar/dir"
>> path = real_path.gsub("/", "\\/")
=> "\\/foo\\/bar\\/dir"
>> puts "sed 's/SHARE_PATH/#{path}/g' #{path}/config/sphinx.yml > #{path}/config/sphinx.tmp.yml"
sed 's/SHARE_PATH/\/foo\/bar\/dir/g' \/foo\/bar\/dir/config/sphinx.yml > \/foo\/bar\/dir/config/sphinx.tmp.yml
=> nil
>>
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么你需要在路径中反斜杠?