GitHub Actions中创建匹配模式分支数组时出现无值异常
问题原因与解决方法
核心问题
- git分支输出处理不当:原脚本用
git branch -r的输出包含前导空格,经sed处理后仍残留空白字符,转成空格分隔字符串后,eval会将空白解析为空数组元素,导致循环时$branch为空。 - 数组构建方式不可靠:使用
eval转换字符串为数组存在安全风险,且在GitHub Actions的bash环境中容易因空白字符解析错误生成空元素。 - 数组未初始化:
mergeBranches数组未提前声明,可能导致意外行为。
修复后的脚本
- id: createMergeBranches shell: bash run: | # 用git for-each-ref可靠获取远程分支,避免多余空格 readarray -t featureArray < <(git for-each-ref --format='%(refname:short)' refs/remotes/origin/ | grep -i "feature" | grep -v "merge") # 初始化合并分支数组 mergeBranches=() # 循环处理分支 for branch in "${featureArray[@]}" do mergeBranch="merge/${{ inputs.sourceBranch }}_$branch" mergeBranches+=("$mergeBranch") echo "Feature Branch: $branch" echo "Merge Branch: $mergeBranch" done # 将结果输出到GitHub Actions环境(传递到后续步骤) echo "featureArray=${featureArray[*]}" >> $GITHUB_OUTPUT echo "mergeBranches=${mergeBranches[*]}" >> $GITHUB_OUTPUT
关键改进点
- 改用
git for-each-ref:直接输出干净的分支名(不含origin/前缀、无多余空格),无需复杂的sed/tr处理。 - 用
readarray构建数组:安全可靠地将每行分支名存入数组,避免eval带来的解析错误和安全问题。 - 数组操作加引号:
"${featureArray[@]}"和"$mergeBranch"确保分支名含空格时也能正确处理。 - 正确传递输出:使用
$GITHUB_OUTPUT将数组传递到后续步骤,替代已弃用的set-output。
内容的提问来源于stack exchange,提问作者froggomad
相关产品推荐
相关产品推荐

