2015-02-05 76 views
0

我将带有JSON的ENVs传递给Docker。我需要在shell上使用一个字符串作为参数。在shell中,转义单引号的正确方法是使用'\''。所以,"Tom's Market"变得"Tom'\''s Market"为:转义shell的单引号

docker run -it -e FOO='["Tom'\''s Market"]' ... 

Ruby的Shellwords似乎没有这样做。

Shellwords.shellescape('["Tom\'s Market"]') 
#=> \[\"Tom\'s\ Market\"\] 

所以我想用简单的查找/替换:

'["Tom\'s Market"]'.gsub("'", "'\\''") 
#=> ["Tom's Market"]'s Market"] 

我不知道发生了什么事情在那里。有人能帮我吗?

回答

3

好吧,反斜杠是你如何在红宝石串中逃脱。为了逃避它,你需要另一个反斜杠。

的通常是添加反斜线,直到它的工作原理

puts %q{["Tom's Market"]}.gsub("'", "'\\\\''") 
# ["Tom'\''s Market"] 
+0

非常感谢您! – 2015-02-06 15:58:06

+2

尽管我讨厌承认它,但至少有一次在我的生活中,我已经添加了反斜杠,直到它工作,... – ioquatix 2016-10-20 09:27:23