Jenkins编写Pipeline脚本时如何将变量下划线替换为连字符
问题原因
你当前写法TEMPVAR为空有两个核心错误:
- 直接使用管道
|无法将命令执行结果赋值给变量,shell中捕获命令输出需要用$(命令)的命令替换语法 - 变量
$VAR本身不会主动将值输出到标准输入流传递给tr命令,需要搭配echo/printf输出内容
正确实现
该需求完全可以实现,两种常用实现方案如下:
方案1:使用tr命令(兼容所有POSIX shell)
不需要依赖特定shell环境,通用性最强:
void someFun(){ sh ''' VAR='a_b_c_d' # 用$()捕获echo + tr的执行结果赋值给TEMPVAR TEMPVAR=$(echo "$VAR" | tr '_' '-') echo "With hyphens $TEMPVAR-blah-blah" echo "With underscores $VAR" ''' } stage('测试变量替换'){ someFun() }
方案2:使用bash参数扩展(更高效)
如果Jenkins agent运行环境支持bash,直接用原生参数替换语法性能更好,无需额外调用外部进程:
void someFun(){ sh '''#!/bin/bash VAR='a_b_c_d' # 语法 ${变量//旧字符串/新字符串} 代表全局替换所有匹配项 TEMPVAR=${VAR//_/-} echo "With hyphens $TEMPVAR-blah-blah" echo "With underscores $VAR" ''' } stage('测试变量替换'){ someFun() }
两种方案都不会修改原VAR的值,替换后的结果会持久存储在TEMPVAR中可后续复用。
内容的提问来源于stack exchange,提问作者curious_coder
相关产品推荐
相关产品推荐

