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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:05:03