You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Docker运行Shell脚本出现sh: 0: unknown operand错误如何解决?

错误原因

  • 你的脚本使用了[[ ]]这类Bash 专属语法,但Docker执行脚本时默认调用的是sh解释器(多数基础镜像里sh是兼容POSIX标准的轻量Shell,比如Dash、BusyBox Shell),并不支持[[ ]]语法、&&/||直接在双括号内做逻辑判断的写法。
  • 当sh解析到不认识的[[语法时,会把后续的参数拆分解析错误,最终抛出sh: 0: unknown operand的报错。
  • 另外如果脚本没有提前为$EXITCODE变量赋值,空变量在sh的-ne数值判断中也会触发同类参数解析错误。

解决方法

  • 方案1:显式指定用Bash执行脚本
    要么在脚本头部加#!/bin/bash声明,要么在Docker调用脚本的命令里改成bash your-script.sh,确保用Bash解释器执行匹配你本地的运行环境。
  • 方案2:修改为兼容POSIX标准的sh语法,调整判断逻辑如下:
if [ "$EXITCODE" -ne 0 ] && { [ "$CI_COMMIT_BRANCH" = "staging" ] || [ "$CI_COMMIT_BRANCH" = "develop" ]; }; then
  echo "Hello"
fi

注意要点:用单括号[ ]做判断、变量全部加双引号避免空值解析异常、字符串相等判断用=而非==、逻辑运算放到括号外或者用-a/-o(更推荐用大括号分组逻辑避免优先级问题)。

  • 方案3:提前确保$EXITCODE变量已经正确赋值,比如在判断前加EXITCODE=$?获取上一条命令的退出码,避免空变量导致的参数解析错误。

内容的提问来源于stack exchange,提问作者C. Yee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:45:06