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

Bash脚本检测单个Docker容器运行时出现bad substitution错误的原因

错误原因及修正方案

错误原因

你写的${#"$(docker ps -q --filter name=image-name)"}违反了Bash的参数扩展语法规则:

  • Bash中${#VAR}用于获取变量VAR的字符长度,但不能直接将带引号的命令替换("$(...))嵌套在${#}内部,这种写法属于非法的参数替换,因此会抛出bad substitution错误。

另外补充一点:你通过字符长度判断是否为单个容器的逻辑存在隐患——docker ps -q输出的容器ID默认是12位字符,且多个容器时会每行输出一个ID,用字符长度判断容易出现误判(比如单个ID的长度可能不是8,或者多个ID的总长度刚好等于8)。

修正后的脚本示例

方法1:用变量存储输出后判断长度

while true; do
    # 捕获容器ID输出
    container_ids=$(docker ps -q --filter name=image-name)
    # 判断输出长度是否符合预期
    if [ ${#container_ids} -eq 8 ]; then
        break
    fi
    echo wait
    sleep 1
done
echo OK

方法2:更可靠的行数判断(推荐)

直接统计输出的行数,判断是否仅有1个容器在运行:

while [ $(docker ps -q --filter name=image-name | wc -l) -ne 1 ]; do
    echo wait
    sleep 1
done
echo OK

内容的提问来源于stack exchange,提问作者Fred Hors

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:22:43