我尝试通过ruby gsub命令将 "/foo/bar/dir"
修改为 "\/foo\/bar\/dir"
.
我用irb测试它的结果是
x = "/foo/bar/dir"
x.gsub("/","\/")
=> "/foo/bar/dir"
x.gsub("/","\\/")
=> "\\/foo\\/bar\\/dir"
Is it possible to replace "/" with "/" by 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”命令的结果是
"sh -c 'sed '\''s/SHARE_PATH/\\/home\\/me\\/www\\/idata\\/shared/g .... "
我需要的只是一个反斜杠
"sh -c 'sed '\''s/SHARE_PATH/\/home\/me\/www\/idata\/shared/g .... "
“跑”是卡皮斯特拉诺的命令
my solution is
使用单引号而不是像这样的双引号
path = real_path.gsub("/",'\/')
2 回答
是的
你的第一个例子实际上做了你想要的,但是irb正在使用的
.inspect
方法是转义反斜杠,所以看起来有额外的东西 . 如果您使用过puts
,您会看到真实的结果 .你写:
所以你做了之前问过的事 .
x.gsub("/","\\/")
实际上计算为"\/foo\/bar\/dir"
但是irb打印inspect
方法的返回值而不是to_s
.Edit: 你的意思是
不是
无论如何输出是正确的 - 你用
\/
改变了/
所以你有代替
结果与irb的结果不同(注意缺少加倍的反斜杠) .
对于路径操作,我建议使用
File.join
(documentation)顺便说一句:为什么你这样修改路径?
(1)
Edit2: 为什么您要求将"/"更改为"/"但写下以下行?
你想要实现什么目标?您对问题
(1)
的回答是什么?Edit3:
开始了:
但我不明白为什么你需要在路径中反斜杠?