Skopeo输出匹配异常:Bash条件判断始终执行else分支
Bash条件判断没匹配到Skopeo错误输出的解决办法
方案1:关闭Skopeo的彩色输出
Skopeo默认会给终端输出的日志加颜色,这些看不见的ANSI控制字符会让grep找不到纯文本的"manifest unknown"。加个--no-color参数关掉颜色输出就行:
if skopeo inspect --no-color docker://abc:xyz 2>&1 | grep -q "manifest unknown"; then echo "match" else echo "no match" fi
方案2:过滤掉控制字符
如果Skopeo不支持--no-color,可以用sed先把输出里的颜色控制码删掉,再交给grep匹配:
if skopeo inspect docker://abc:xyz 2>&1 | sed 's/\x1b\[[0-9;]*m//g' | grep -q "manifest unknown"; then echo "match" else echo "no match" fi
方案3:用Bash原生字符串匹配
不用管道,直接把命令输出存到变量里,用Bash自带的字符串包含判断:
output=$(skopeo inspect docker://abc:xyz 2>&1) if [[ "$output" == *"manifest unknown"* ]]; then echo "match" else echo "no match" fi
问题根源
核心问题是Skopeo的错误日志带了ANSI颜色控制字符——终端显示时你看不到这些字符,但它们真实存在于输出里。普通grep匹配纯文本的"manifest unknown"时,会因为这些额外字符匹配失败,导致else分支执行,所以你一直看到"no match"。
内容的提问来源于stack exchange,提问作者Vishal
相关产品推荐
相关产品推荐

