如何为包含空格的 Jenkins 环境变量指定值

Posted

技术标签:

【中文标题】如何为包含空格的 Jenkins 环境变量指定值【英文标题】:How to specify a value for a Jenkins environment variable that contains a space 【发布时间】:2013-07-08 13:20:30 【问题描述】:

我正在尝试为包含空格的 Jenkins 环境变量(在管理 Jenkins -> 配置系统屏幕上的“全局属性”标题下创建)指定一个值。我想在 Execute Shell 构建步骤中使用此环境变量。我需要在构建步骤的命令行中出现的选项是:

--platform="Windows 7"

我在命令行中使用的语法是--platform=$VARIABLE_NAME

无论我如何尝试格式化它,Jenkins 似乎都会重新格式化它,以便将其视为两个值。我试过了:

Windows 7 “Windows 7” 'Windows 7' Windows\7

在 Execute Shell 构建步骤期间输出时的相应结果是:

--platform=Windows 7 '--platform="Windows' '7"' '--platform='\''Windows' '7'\''' --platform=Windows/7

我还尝试将我的命令行语法更改为--platform='$VARIABLE_NAME''--platform=$VARIABLE_NAME',但在每种情况下,$VARIABLE_NAME 根本没有解决,只是在结果命令上显示为$VARIABLE_NAME

我希望有办法使这项工作。任何建议都非常感谢。

【问题讨论】:

【参考方案1】:

您应该能够在全局属性部分中使用没有任何特殊字符的空格。

例如,我将变量“THIS_VAL”设置为具有值“HAS SPACES”。

我的测试构建工作如下:

#!/bin/bash
set +v
echo $THIS_VAL
echo "$THIS_VAL"
echo $THIS_VAL

输出是

[workspace] $ /bin/bash /tmp/hudson8126983335734936805.sh
HAS SPACES
HAS SPACES
HAS SPACES
Finished: SUCCESS

我认为您需要做的是使用以下内容:

--platform="$VARIABLE_NAME"

注意:使用双引号,而不是单引号。使用单引号使引号内的内容变为文字,这意味着任何变量都将按原样打印,而不是解析为实际值。因此 '$VARIABLE_NAME' 将按原样打印,而不是解析为“Windows 7”。


编辑: 根据下面的@BobSilverberg 评论,使用以下内容:

--platform="$VARIABLE_NAME"

注意:没有大括号。

【讨论】:

谢谢萨加尔。在我尝试过的所有组合中,这不是其中之一。它确实成功了,但我必须指定--platform="$VARIABLE_NAME"。如果我使用--platform="$VARIABLE_NAME",它会在其中偷偷添加一些额外的引号,所以结果是'--platform='\''Windows 7'\'''

以上是关于如何为包含空格的 Jenkins 环境变量指定值的主要内容,如果未能解决你的问题,请参考以下文章

如何为配置脚本指定包含目录

如何为运行脚本设置自定义环境变量

如何为 jenkins git 插件指定 ssh 密钥

使用 seaborn 绘图时,如何为色调参数指定多个变量?

如何为 xcode 添加全局包含路径

如何为 [Setup] AppVersion 使用编译时环境变量?