jenkins 截取字符串_Jenkins shell字符串引用替换

在 Jenkins 的 Execute Shell 脚本中使用 Bash,遇到字符串包含转义换行符( )的问题,导致双引号被替换为单引号,从而无法正确解析换行。解决办法是在 git commit 命令中使用反引号包裹 printf 命令来保留多行字符串,例如:`printf"多行 内容"`。这将在 Jenkins 的 Shell 步骤中正常工作,保持换行效果。
摘要由CSDN通过智能技术生成

I have a Jenkins job with an execute shell box. In the execute shell I use bash instead of dash (sh). In the execute shell I have strings which are supposed to be interpreted as they contain escape sequences (in this case the new line: \n), so here is an example execute shell:

#!/bin/bash

set -x #echo on

git fetch

...

git commit -m "Merging $DEVELOPEMENTBRANCH into $INITIALBRANCH\n\nThis is an example second paragraph."

...

My problem here is that the script block is interpreted/replaced by Jenkins in a way that it changes its behavior, to be specific it replaces the variables and replaces the double quotes with single quotes so in the console output it looks like this:

[4] $ /bin/bash /tmp/hudson7542128982632971668.sh

+ git fetch

...

+ git commit -m 'Merging my_feature into develop\n\nThis is an example second paragraph'

...

But in this way the \n part won't be interpreted because of the single quotes. What is the trick here? I want to preserve the double quotes or at least interpret the \n sequences.

解决方案

git commit -m "A multi-line\n\ncommit message" will not produce a multi-line

commit message anyway. The commit message will be, literally, A multi-line\n\ncommit message.

Double-quotes do not cause bash to interpret printf escape-sequences.

To get a multi-line commit-message you need:

git commit -m "`printf \"A multi-line\n\ncommit message\"`"

This works fine in a Jenkins shell step.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值