我需要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
注意:在配置系统中有任何指定,所以它应该使用默认的Bash
可能是什么问题?
我不认为=~
在[ ... ]
内部工作——请使用[[ ... ]]
。
Shellcheck是一个很好的工具,可以找到这些类型的东西;它将显示您已达到SC2074。
回复:
在这一行失败,即使这一行只是一个注释
您不能有一个"空";CCD_ 6块。您可以仅使用:
作为要执行的代码:
if [[ "$foo" == "bar" ]]; then
:
fi
下一个想法是:让你的代码在shell脚本中运行,然后把代码放在Jenkins中。您可能需要模拟Jenkins提供的一些输入才能做到这一点,但这需要从等式中再提取一个移动部分。如果代码是从命令行运行的,而不是在Jenkins中,那么你需要开始寻找Jenkins特定的原因,比如它可能是在csh而不是Bash中运行的(我看到你已经提到了这种特定的可能性,但也许还有其他类似的事情——对不起,我不知道Jenkins(。
所以问题是我以为Jenkins给了我一个数组,但它给了我字符串。(我与扩展选择参数一起使用,有多种选择(。
所以条件应该是[[ "$BuildVariants" == *"VariantA"* ]]
。