提问者:小点点

意外操作员-竹计划中的外壳脚本[重复]


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

["$(git rec-parse--abbrev-ref HEAD)" == *测试* ] || [ "$(git reg-parse--abbrev-ref HEAD)" == *开发*]

应该检查分支名称是< code>test还是< code>develop。如果是,那么它应该打印消息< code>yes。

我在分支Development上运行它,然后我得到了错误。

错误信息:[:开发:意外运算符

更新:

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

所以我的命令看起来:

[“$(git rev parse--abbrev ref HEAD)”=*测试*]||[“$”(git rev parse--abbrev refHEAD)“=*开发*]

我收到的错误消息:[:pytest.ini:意外运算符

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


共1个答案

匿名用户

单括号的问题是通配符是通过文件名扩展(global bing)扩展的。考虑一下:

$ 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"

或者,您可以按如下方式使用< code>case:

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

请注意,单引号(< code>[)只是< code>test内置的同义词,唯一的例外是单引号要求最后一个参数是< code>]。