转义shell的单引号

时间:2015-02-05 23:59:28

标签: ruby string shell escaping

我将带有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"]

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

2 个答案:

答案 0 :(得分:4)

好吧,反斜杠是你如何逃避红宝石字符串。要逃避它,你需要另一个反斜杠。

通常是添加反斜杠直到它起作用

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

答案 1 :(得分:0)

Shellwords.escape 的结果用于不加引号:

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