You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本中无法验证JIRA_DESCRIPTION是否为空的问题排查

JIRA描述空值验证失效问题排查与修复

问题现象

在GitLab CI脚本中调用JIRA API获取详情后,用jq提取description字段并验证是否为空,但即使JIRA描述为空,验证逻辑仍判定为通过。CI输出显示$JIRA_DESCRIPTION的值为""(带双引号的空字符串),但[ -z "$JIRA_DESCRIPTION" ]判断未触发失败分支。

问题根源

  1. jq输出格式特性:jq默认会将JSON字符串类型的值用双引号包裹输出。当JIRA描述为空时,API返回的空字符串会被jq处理为""(包含双引号的字符串),而非真正的空值。此时$JIRA_DESCRIPTION的实际值是"",不是空字符串,-z(检测空字符串)的判断条件自然不成立。
  2. 最初尝试的[[ "$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 01:38:37