Jenkins Execute shell if then 语句因“Bad substitution”而失败
Jenkins Execute shell if then statement fails with `Bad substitution`
我需要在 Jenkins Execute Shell 中使用 if 语句,但它总是在同一行失败,无论那里有什么。
我正在尝试做这样的事情:
if [ " ${BuildVariants[*]} " =~ " VariantA " ]; then
# fails on this line even this line is just a comment
variant_config=""
fi
当我尝试在那里分配一个变量时失败,当我尝试 echo "anything"
时失败,甚至在评论时失败(如上例)
原因:Bad substitution
注意:Configure System中有任何指定,所以它应该使用默认值Bash。
可能是什么问题?
我认为 =~
在 [ ... ]
中不起作用——请改用 [[ ... ]]
。
Shellcheck is a great tool for find these types of things; it would show that you've hit SC2074.
回复:
fails on this line even this line is just a comment
你不能有一个“空的”then
块。您可以只使用 :
作为要执行的代码:
if [[ "$foo" == "bar" ]]; then
:
fi
下一个想法:将代码放入 shell 脚本中 运行,然后将代码放入 Jenkins。您可能需要模拟一些 Jenkins-supplied 输入来做到这一点,但它需要从等式中移除一个移动部分。如果命令行中的代码 运行s 而 Jenkins 中没有,那么你需要开始寻找 Jenkins-specific 原因,比如它可能在 csh 中是 运行 而不是 Bash(我看到你已经提到了这种特定的可能性,但也许还有其他类似的东西——我不认识 Jenkins,抱歉)。
所以问题是我以为 Jenkins 给我一个数组,但它给了我一个字符串。 (我使用了扩展选择参数,有多项选择。
所以条件应该是 [[ "$BuildVariants" == *"VariantA"* ]]
。
我需要在 Jenkins Execute Shell 中使用 if 语句,但它总是在同一行失败,无论那里有什么。 我正在尝试做这样的事情:
if [ " ${BuildVariants[*]} " =~ " VariantA " ]; then
# fails on this line even this line is just a comment
variant_config=""
fi
当我尝试在那里分配一个变量时失败,当我尝试 echo "anything"
时失败,甚至在评论时失败(如上例)
原因:Bad substitution
注意:Configure System中有任何指定,所以它应该使用默认值Bash。
可能是什么问题?
我认为 =~
在 [ ... ]
中不起作用——请改用 [[ ... ]]
。
Shellcheck is a great tool for find these types of things; it would show that you've hit SC2074.
回复:
fails on this line even this line is just a comment
你不能有一个“空的”then
块。您可以只使用 :
作为要执行的代码:
if [[ "$foo" == "bar" ]]; then
:
fi
下一个想法:将代码放入 shell 脚本中 运行,然后将代码放入 Jenkins。您可能需要模拟一些 Jenkins-supplied 输入来做到这一点,但它需要从等式中移除一个移动部分。如果命令行中的代码 运行s 而 Jenkins 中没有,那么你需要开始寻找 Jenkins-specific 原因,比如它可能在 csh 中是 运行 而不是 Bash(我看到你已经提到了这种特定的可能性,但也许还有其他类似的东西——我不认识 Jenkins,抱歉)。
所以问题是我以为 Jenkins 给我一个数组,但它给了我一个字符串。 (我使用了扩展选择参数,有多项选择。
所以条件应该是 [[ "$BuildVariants" == *"VariantA"* ]]
。