我试图使用docker CLI命令以下列方式添加变量:
docker exec -u root airflowdags_webserver_1 bash -c "airflow variables --set my_var '{\"test\": \"test\'2\"}'"
但是得到以下错误:
bash:-c:第0行:在寻找匹配的“”
时出现意外的EOFbash:-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”值中转义撇号以避免错误?
答案 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中,您可以指定命令数组。
答案 2 :(得分:0)
您可以在第一个单引号之前使用 $ 以便能够在命令中使用转义单引号。
所以:
docker exec -u root airflowdags_webserver_1 bash -c "airflow variables --set my_var $'{\"test\": \"test\'2\"}'"