鉴于:
工作shell代码在一个点处断开字符串并将接收到的部分写入变量。
version='1.2.3.4'
IFS='.' read -r major minor micro build <<- _EOF_
$version
_EOF_
echo $major $minor
一个任务:
pipeline在脚本中使用它Jenkins
问题:
因为 我需要使用shell脚本中的变量。pipeline我必须将shell代码用 3 个双引号括起来。因为他们,我必须连续筛选所有内容。除了这个地方,一切都被筛选了:
stage('test') {
steps {
sh """
version='1.2.3.4'
IFS='.' read -r major minor micro build <<- _EOF_
\$version
_EOF_
echo \$major \$minor
"""
}
}
如果您像这样逃脱:\$version- 尝试读取pipline变量并跌倒。如果你开始以某种方式变态,你会得到非常奇怪的错误,比如unexpected end of file
问题:
这里应该怎么做?为什么这里有问题?我通常在那里有很多代码,但是转义在这里不起作用
问题是终止heredoc的字符序列前面必须只有制表符(
0х09)和一些空格,前后都不能。此答案中的更多详细信息。例如,请参阅编辑器用空格替换输入选项卡的相关问题。如果您不关心缩进,您可以使用stripIndent()方法简单地删除缩进。
问题中的代码片段如下所示:
PS这个答案只是关于代码的“美”,这里的权宜之计已经在@alexanderbarakin的评论中得到了详细的回答。
结果,问题变成了空格和制表符,借助它们,代码变得可读且美观。如果代码像这样毁容(去除缩进):
然后一切正常。结论 - 一切都非常糟糕。任何一行代码
shell都不会击中程序员的腿,概率约为 87%。我得到它是这样的: