Jenkins流水线:如何将多行变量转为空格分隔单行格式?
Jenkins流水线多行变量转空格分隔单行的解决方法
在Jenkins流水线中,我们通过sh步骤获取命令的多行输出并存入变量:
some_var = sh(returnStdout: true, script: '''some_command''').trim()
但后续需要将这个变量传入仅接受空格分隔单行值的different_command时,直接使用会因为换行符报错。之前尝试的some_var.replace("[\\r\\n]*", "")不生效,原因是replace方法仅支持固定字符串替换,不支持正则表达式,且正则写法也存在问题。
以下是几种可行的解决方法:
方法1:用Groovy的replaceAll正则替换
使用replaceAll处理所有换行格式(包含Unix的\n和Windows的\r\n),替换为单个空格:
some_var = sh(returnStdout: true, script: '''some_command''').trim() // 匹配所有换行符并替换为单个空格 some_var = some_var.replaceAll(/[\r\n]+/, ' ')
方法2:在Shell命令中直接处理输出
在获取命令结果时,直接通过Shell工具tr和xargs把换行转成空格并清理多余空格:
some_var = sh(returnStdout: true, script: '''some_command | tr '\\n' ' ' | xargs''').trim()
tr '\n' ' '将所有换行符替换为空格xargs会自动压缩连续空格为单个,同时去除首尾空格
方法3:Groovy分割再拼接
通过split按换行分割成数组,再用join拼接成空格分隔的字符串:
some_var = sh(returnStdout: true, script: '''some_command''').trim() some_var = some_var.split(/[\r\n]/).join(' ')
处理完成后,即可正常传入后续命令:
sh '''different_command -v "${some_var}"'''
内容的提问来源于stack exchange,提问作者Sven van den Boogaart
相关产品推荐
相关产品推荐

