我将带有JSON的ENV传递给Docker。我需要在shell上使用一个字符串作为参数。在shell中,使用'\''
来逃避单引号的正确方法。因此,"Tom's Market"
变为"Tom'\''s Market"
,如下所示:
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"]
我不知道那里发生了什么。有人能帮助我吗?
答案 0 :(得分:4)
好吧,反斜杠是你如何逃避红宝石字符串。要逃避它,你需要另一个反斜杠。
通常是添加反斜杠直到它起作用
puts %q{["Tom's Market"]}.gsub("'", "'\\\\''")
# ["Tom'\''s Market"]
答案 1 :(得分:0)
Shellwords.escape
的结果用于不加引号:
docker run -it -e FOO=\[\"Tom\'s\ Market\"\]