【发布时间】:2010-02-22 01:58:49
【问题描述】:
我尝试通过 ruby gsub 命令将"/foo/bar/dir" 修改为"\/foo\/bar\/dir"。
我在 irb 中测试它的结果是
x = "/foo/bar/dir"
x.gsub("/","\/")
=> "/foo/bar/dir"
x.gsub("/","\\/")
=> "\\/foo\\/bar\\/dir"
gsub 可以用“/”替换“/”吗?
问题来源:
我尝试执行“命令行中的字符串”并且“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"
“运行”命令的结果是
"sh -c 'sed '\''s/SHARE_PATH/\\/home\\/me\\/www\\/idata\\/shared/g .... "
我只需要一个反斜杠
"sh -c 'sed '\''s/SHARE_PATH/\/home\/me\/www\/idata\/shared/g .... "
“运行”是来自 Capistrano 的命令
我的解决方案是
像这样使用单引号而不是双引号
path = real_path.gsub("/",'\/')
【问题讨论】:
-
real_path的外观如何?我的意思是puts real_path的输出是什么?正如我所说,您正在询问“/”到“\/”的修改,但您有gsub("\/", "\\/") -
gsub("/","\\/") 和 gsub("\/","\\/") 将返回相同的结果。它会在“/”前添加一个“\\”