在docker命令中逃脱撇号

时间:2017-10-19 18:22:59

标签: bash docker escaping airflow apache-airflow

我试图使用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”值中转义撇号以避免错误?

3 个答案:

答案 0 :(得分:3)

bash单引号字符串不能包含单引号。你无法摆脱它。 (REF 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

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

答案 1 :(得分:0)

在版本3中,您可以指定命令数组

https://docs.docker.com/compose/compose-file/#command

答案 2 :(得分:0)

您可以在第一个单引号之前使用 $ 以便能够在命令中使用转义单引号。

所以:

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