在 Docker 命令中如何转义单引号

3

我正在尝试使用Docker CLI命令以以下方式添加变量:

 docker exec -u root  airflowdags_webserver_1 bash -c  "airflow variables --set my_var '{\"test\": \"test\'2\"}'"

但是出现了以下错误:

bash: -c: 第0行:寻找匹配`" '时出现意外的EOF

bash: -c: 第1行:语法错误:意外的文件结尾

如果执行以下其中一个命令,则没有任何错误:
docker exec -u root  airflowdags_webserver_1 bash -c  "airflow variables --set my_var '{\"test\": \"test\`2\"}'"

或者

docker exec -u root  airflowdags_webserver_1 bash -c  "airflow variables --set my_var '{\"test\": \"test2\"}'"

如何在值为"test'2"的情况下转义撇号以避免出现错误?


如果你使用 printf X"airflow variables --set my_var '{\"test\": \"test\'2\"}'"X\\n,你会得到 Xairflow variables --set my_var '{"test": "test'2"}'X,这将告诉你在第四个参数中有一个普通的 ''{…}' 中。你可能需要使用 "airflow variables --set my_var '{\"test\": \"test'"\\\'"'2\"}'",它会给出 airflow variables --set my_var '{"test": "test'\''2"}',这意味着第四个参数为 {"test": "test'2"} - dlamblin
3个回答

6

在Bash中,单引号字符串不能包含单引号。你无法对其进行转义。(参考https://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes)

尝试这样做:

bash -c  "airflow variables --set my_var '{\"test\": \"test'\''2\"}'"
# .......................................1.................1..2....2

我给匹配的单引号字符串编号了。中间是一个字面上的单引号。


0

0

你可以在第一个单引号前使用美元符号($), 以便在命令中使用转义的单引号。

因此:

 docker exec -u root  airflowdags_webserver_1 bash -c  "airflow variables --set my_var $'{\"test\": \"test\'2\"}'"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接