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

如何让Bash正确读取Docker命令的参数?

解决Bash脚本中Docker Build标签参数化的空格问题

你遇到的问题是Bash的单词拆分机制导致的:当直接使用$derp展开变量时,变量里的双引号会被当作普通字符处理,带空格的标签内容会被拆分成多个独立参数,Docker因此无法识别正确的参数格式,抛出错误。

正确的解决方法:使用数组存储参数

Bash数组可以完整保留带空格的参数单元,避免被错误拆分,这是最安全可靠的方式:

# 定义数组,每个元素是一个完整的Docker选项
docker_labels=(--label "description=my description with spaces")
# 展开数组时用双引号包裹,确保每个元素作为单独参数传递
docker build --tag mytag "${docker_labels[@]}" .

不推荐的替代方案:使用eval(存在安全风险)

如果一定要用单个变量传递,可以借助eval强制解析变量里的引号,但这种方式在变量内容不可控时可能执行恶意命令,谨慎使用:

derp='--label "description=my description with spaces"'
eval docker build --tag mytag $derp .

错误原因说明

原写法中,echo $derp看起来输出正常,但实际Bash展开$derp时,会把--label description="my description with spaces"拆分成--label、"description=my、description、with、spaces"这几个独立参数传递给Docker,导致Docker无法识别正确的参数结构,从而报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:37:20