Bamboo计划中出现意外的运算符shell脚本



我尝试在Bamboo计划中运行shell命令。这是我尝试运行的代码:

[ "$(git rev-parse --abbrev-ref HEAD)" == *test* ] || [ "$(git rev-parse --abbrev-ref HEAD)" == *develop* ] && echo "yes"

应该检查分支名称是test还是develop。如果是,则应打印消息yes

我在分支develop上运行了这个,然后出现了错误。

错误消息:[: develop: unexpected operator


更新:

这是POSIX所以基于一个帖子:bash中的字符串比较。[[:未找到我用一个=替换了==

所以我的命令看起来:

[ "$(git rev-parse --abbrev-ref HEAD)" = *test* ] || [ "$(git rev-parse --abbrev-ref HEAD)" = *develop* ] && echo "yes"

我得到的错误消息:[: pytest.ini: unexpected operator

不知道pytest.ini在这里做什么。我的应用程序使用pytest,但在这一步我没有运行它。

单括号的问题是通配符通过文件名扩展(globbing(进行扩展。考虑一下:

$ touch test{1,2,3,4}
$ set -x
$ [ "$(git rev-parse --abbrev-ref HEAD)" == *"test"* ] || [ "$(git rev-parse --abbrev-ref HEAD)" == *"develop"* ] && echo "yes"
$ [ "$(git rev-parse --abbrev-ref HEAD)" == *"test"* ]
++ git rev-parse --abbrev-ref HEAD
+ '[' develop == test1 test2 test3 test4 ']'
-bash: [: too many arguments

如果你的外壳中有双括号,那么你可以用双括号代替单括号:

[[ "$(git rev-parse --abbrev-ref HEAD)" == *"test"* ]] 
|| [[ "$(git rev-parse --abbrev-ref HEAD)" == *"develop"* ]] && echo "yes"

作为替代方案,您可以按如下方式使用case

case "$(git rev-parse --abbrev-ref HEAD)" in
*test*|*develop*)
echo 'yes'
;;
esac

注意,单开括号([(只是内置test的同义词,唯一的例外是单开括号要求最后一个参数为]

最新更新