Jenkins自由风格项目:如何正确遍历多值参数
解决Jenkins自由风格项目多值参数遍历问题
问题原因
直接用$(echo "${COMPONENTS}")做循环迭代时,会依赖系统默认的IFS(内部字段分隔符,默认包含空格、制表符、换行)。如果参数值存在前后空格、连续空格,就会生成空的迭代项,进而出现'/path/to/-*.tar.gz': No such file or directory的错误。
正确遍历方式
方式1:使用数组存储参数(简单高效)
将参数值拆分为数组,自动忽略多余空格后遍历:
# 把参数转换为数组,自动过滤无效空格 COMPONENTS_ARRAY=(${COMPONENTS}) for COMPONENT in "${COMPONENTS_ARRAY[@]}"; do # 替换<DO SOMETHING WITH>为你的实际操作,比如解压、复制等 <DO SOMETHING WITH> "/path/to/${COMPONENT}-*.tar.gz" done
方式2:使用while read循环(更安全,支持特殊字符)
如果参数值可能包含空格、引号这类特殊字符,可先将空格替换为换行,过滤空行后逐行读取:
echo "${COMPONENTS}" | tr ' ' '\n' | grep -v '^$' | while read -r COMPONENT; do <DO SOMETHING WITH> "/path/to/${COMPONENT}-*.tar.gz" done
特殊情况:处理Jenkins多选参数
如果COMPONENTS是Jenkins的多选参数(Multi-select Parameter),而非手动输入空格分隔的字符串,Jenkins会用换行符分隔选中的值,此时用以下方式处理:
while read -r COMPONENT; do # 跳过空行 if [ -n "${COMPONENT}" ]; then <DO SOMETHING WITH> "/path/to/${COMPONENT}-*.tar.gz" fi done <<< "${COMPONENTS}"
内容的提问来源于stack exchange,提问作者DonnyFlaw
相关产品推荐
相关产品推荐

