Shell脚本比对docker镜像tag变量时if条件判断不生效问题求助
Shell脚本镜像Tag比对不生效问题排查
根因分析
- 命令结果赋值逻辑错误
你当前的var="docker images ..."写法是将整串命令文本直接赋值给了var变量,并未执行命令获取返回结果。Shell中捕获命令输出必须使用$(命令)格式的命令替换语法,这一步你拿到的var值是一长串命令字符串,自然不可能和'2'匹配。 - 双引号嵌套语法错误
赋值时你写的var="docker images "localhost:5000/*" --format='{{.Tag}}' | head -1",外层用了双引号,内部的localhost路径又直接用双引号包裹,会导致Shell提前截断字符串,变量赋值内容本身就存在错乱。 - 判断逻辑时序错误
你把命令执行的eval "$var"放在了else分支中,就算后续执行拿到了结果2,if判断的时候var还没有被执行得到对应值,判断逻辑早已执行完成。
修正后的代码示例
echo "The tag in the last image hosted on the registry:" # 使用$()捕获docker命令的执行结果赋值给var var=$(docker images "localhost:5000/*" --format='{{.Tag}}' | head -1) # 可选:清理结果前后的空白/换行符,避免不可见字符影响比对 var=$(echo "$var" | xargs) if [ "$var" = '2' ] then echo "its equal" else echo "its not equal" echo "实际获取到的tag值为:$var" fi
补充说明:POSIX标准中
[的相等判断用单等号=即可,双等号==是Bash的扩展语法,跨环境运行时用单等号兼容性更好。
内容的提问来源于stack exchange,提问作者Aymane
相关产品推荐
相关产品推荐

