Docker无法识别$符号,执行$( )语法的命令报错缺少参数怎么办?
问题根因及排查方案
1. 当前使用的shell不支持$()命令替换语法
这是所有$()类命令都失效的最核心原因:你大概率在最近1小时内不小心切换到了不兼容POSIX标准的shell(比如csh、tcsh),这类shell仅支持反引号`格式的命令替换,完全不识别$()语法。
- 验证方法:执行
ps -p $$查看当前正在运行的shell类型,正常默认的bash、zsh都支持$()语法。 - 修复方法:执行
exec bash切回bash即可恢复所有$()语法的执行。
2. 当前环境无匹配的Docker镜像
如果仅删除镜像的命令报错,其他$()命令正常,那就是sudo docker images -q没有返回任何镜像ID,导致$(sudo docker images -q)解析为空,相当于只执行了sudo docker rmi,自然触发缺少参数的报错,单独执行sudo docker images确认是否有镜像存在即可。
3. 特殊字符转义问题
如果是从其他地方复制粘贴的命令,可能携带了不可见的零宽字符,导致$符号被转义失效,$()没有被识别为命令替换,手动逐字敲一遍命令即可排除该问题。
4. sudo默认解释器配置修改
如果单独执行$()命令正常,加sudo就失效,说明你修改了sudo的默认shell解释器,且配置的解释器不兼容POSIX标准。可以先切换到root用户再执行命令验证:
sudo su docker rmi $(docker images -q)
内容的提问来源于stack exchange,提问作者Smirnov Danila
相关产品推荐
相关产品推荐

