转义 shell 的单引号
Escaping single quotes for shell
我正在将带有 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\"\]
所以我想使用简单的 find/replace:
'["Tom\'s Market"]'.gsub("'", "'\''")
#=> ["Tom's Market"]'s Market"]
我不知道那里发生了什么。有人可以帮助我吗?
好吧,反斜杠是您在 ruby 字符串中转义的方式。要转义它,您需要另一个反斜杠。
通常是添加反斜杠直到它起作用
puts %q{["Tom's Market"]}.gsub("'", "'\\''")
# ["Tom'\''s Market"]
Shellwords.escape
's result is meant to be used unquoted:
docker run -it -e FOO=\[\"Tom\'s\ Market\"\]
我正在将带有 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\"\]
所以我想使用简单的 find/replace:
'["Tom\'s Market"]'.gsub("'", "'\''")
#=> ["Tom's Market"]'s Market"]
我不知道那里发生了什么。有人可以帮助我吗?
好吧,反斜杠是您在 ruby 字符串中转义的方式。要转义它,您需要另一个反斜杠。
通常是添加反斜杠直到它起作用
puts %q{["Tom's Market"]}.gsub("'", "'\\''")
# ["Tom'\''s Market"]
Shellwords.escape
's result is meant to be used unquoted:
docker run -it -e FOO=\[\"Tom\'s\ Market\"\]