Docker bash ENTRYPOINT命令的三重引号转义问题求助
Docker ENTRYPOINT 带单引号参数的转义解决方案
你的Dockerfile配置了ENTRYPOINT ["/bin/bash", "--login", "-c"],需要执行包含单引号的文件名的命令时,之前尝试的转义方式失效,核心原因是命令会经过两次解析:Docker命令行先解析一次,再交给bash -c内部解析。以下是两种可行的解决方式:
方式一:单引号拼接转义
在bash -c的命令字符串里,单引号无法直接在单引号内部转义,需要用'\''的组合来表示一个单引号(逻辑是:闭合当前单引号 → 输出一个转义的单引号 → 重新打开单引号)。
比如要打印文件名New York's Finest,执行命令:
docker run your-image 'echo '\''New York'\''\'\''s Finest'\'''
如果用双引号包裹整个命令,写法更简洁:
docker run your-image "echo 'New York'\''s Finest'"
方式二:ANSI-C转义字符串
利用bash的$'...'语法,内部的单引号可以用\'直接转义,同时要处理Docker命令行的转义:
docker run your-image $'echo \'New York\\\'s Finest\''
实际操作示例(如删除文件)
如果要删除名为New York's Finest的文件,命令可以写成:
docker run your-image "rm 'New York'\''s Finest'"
内容的提问来源于stack exchange,提问作者Joseph Turian
相关产品推荐
相关产品推荐

