如何让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
相关产品推荐
相关产品推荐

