Shell脚本中无法验证JIRA_DESCRIPTION是否为空的问题排查
JIRA描述空值验证失效问题排查与修复
问题现象
在GitLab CI脚本中调用JIRA API获取详情后,用jq提取description字段并验证是否为空,但即使JIRA描述为空,验证逻辑仍判定为通过。CI输出显示$JIRA_DESCRIPTION的值为""(带双引号的空字符串),但[ -z "$JIRA_DESCRIPTION" ]判断未触发失败分支。
问题根源
- jq输出格式特性:jq默认会将JSON字符串类型的值用双引号包裹输出。当JIRA描述为空时,API返回的空字符串会被jq处理为
""(包含双引号的字符串),而非真正的空值。此时$JIRA_DESCRIPTION的实际值是"",不是空字符串,-z(检测空字符串)的判断条件自然不成立。 - 最初尝试的
[[ "$JIRA_DESCRIPTION" = null ]]逻辑也不成立,因为空描述对应的jq输出是"",而非null(null仅当字段不存在时才会返回)。
修复方案
推荐两种修复方式,优先选择第一种,更简洁直观:
方式一:使用jq的原始输出模式(-r参数)
修改提取JIRA_DESCRIPTION的命令,添加-r(raw output)参数,让jq直接输出字符串的原始内容(去掉双引号):
export JIRA_DESCRIPTION=$(echo ${JIRA_DETAIL} | jq -r '.fields.description')
此时:
- 若JIRA描述为空,jq会输出真正的空字符串,
[ -z "$JIRA_DESCRIPTION" ]判断会触发失败分支; - 若描述有内容,jq会输出不带双引号的纯文本内容,不影响正常判断。
对应的验证逻辑可保留原有写法:
echo $JIRA_DESCRIPTION echo 'doneeee' if [ -z "$JIRA_DESCRIPTION" ] then echo "FAILED! Jira description cannot be empty"; exit 1 else echo "PASSED! Jira description check" fi
方式二:匹配jq输出的特殊值
如果需要保留jq的JSON格式输出,修改判断逻辑,同时匹配""(空字符串)和null(字段不存在的情况):
echo $JIRA_DESCRIPTION echo 'doneeee' if [[ "$JIRA_DESCRIPTION" == "\"\"" || "$JIRA_DESCRIPTION" == "null" ]] then echo "FAILED! Jira description cannot be empty"; exit 1 else echo "PASSED! Jira description check" fi
内容的提问来源于stack exchange,提问作者vinod827
相关产品推荐
相关产品推荐

