我有以下程序:
args = ["a", "b"]
cmd_args = args.map{|x| x.inspect}
str = cmd_args.join(' ')
puts str
输出结果为:
"a" "b"
我希望输出类似于以下内容(使用'
引用的子字符串而不是"
):
'a' 'b'
我不希望在字符串gsub
之后执行inspect
,因为在我的真实系统中,子字符串可能包含"
。例如:
args = ['a"c', "b"]
cmd_args = args.map{|x| x.inspect.gsub('"', '\'')}
str = cmd_args.join(' ')
puts str
将输出:
'a\'c' 'b'
a和c之间的"
被错误地替换。我的预期输出是:
'a"c' 'b'
如何使用'
代替"
进行字符串检查以引用字符串?
答案 0 :(得分:3)
s = 'a"c'.inspect
s[0] = s[-1] = "'"
puts s.gsub("\\\"", "\"") #=> 'a"c'
答案 1 :(得分:3)
您不能强制String#inspect
使用单引号而不重写或覆盖它。
而不是x.inspect
,您可以替换"'#{x}'"
,但是您必须确保转义'
中显示的所有x
个字符。
在这里工作:
args = ["a", "b"]
cmd_args = args.map{|x| "'#{x}'" }
str = cmd_args.join(' ')
puts str
输出结果为:
'a' 'b'