yq返回null值但Shell条件判断无法识别该值的问题求助
解决kislyuk/yq读取null字段的Shell判断问题
问题原因
你当前的脚本判断失效,是因为kislyuk/yq用-y参数输出YAML格式的null时,返回的是字符串"null",而直接写null作为比较值时,Shell会将其视为未定义变量(展开为空字符串),导致比较逻辑出错。即便用单引号包裹'null',如果变量TAG的内容存在不可见字符(比如换行符),也会导致匹配失败。
可靠解决方案1:利用yq的退出码判断(推荐)
使用yq的-e参数,当查询结果为null或目标字段不存在时,yq会返回非0的退出码,直接通过Shell的命令执行状态判断,避免字符串比较的问题:
if ! TAG=$(yq -e -y '.pod.image.imageTag' "${VALUES_FILE}"); then echo "no tag is found..." else echo "Tag is ${TAG}..." fi
解决方案2:精准字符串比较
如果一定要用字符串匹配,确保比较两边都是明确的字符串"null",还可以用printf查看变量实际内容排除不可见字符问题:
TAG="$(yq -y '.pod.image.imageTag' "${VALUES_FILE}")" # 可选:检查变量实际内容,排查不可见字符 # printf "%q\n" "${TAG}" if [ "${TAG}" = "null" ]; then echo "no tag is found..." else echo "Tag is ${TAG}..." fi
内容的提问来源于stack exchange,提问作者joe1531
相关产品推荐
相关产品推荐

