sh 测试两个条件得到 [: missing `]'

Qua*_*tum 0 bash shell-script

我有一个难以清除的错误。所有应该发生的是测试两个条件,然后做一些事情。目标是它是空的还是匹配的。

if [ -z "$_BRANCH"  ] || [[ "$_BRANCH" = "master" ]]; then
    _FOE_BRANCH="master"
    [ -s "$module_dir/branch.gitploy" ] && _FOE_BRANCH=$(cat "$module_dir/branch.gitploy")
    [ "$_FOE_BRANCH" -ne "master"] && _BRANCH=$_FOE_BRANCH
fi
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我不断收到此错误

[: missing `]'
Run Code Online (Sandbox Code Playgroud)

对于这条线

if [ -z "$_BRANCH"  ] || [[ "$_BRANCH" = "master" ]]; then
Run Code Online (Sandbox Code Playgroud)

但是当我阅读以尝试清除它时,我一直在循环。基于/sf/answers/1129722961/,我预计一切都会好起来。

我想解决这个问题,因为我确实看过类似的帖子,并且没有在没有很多更正失败的情况下发布它,所以就我所见,Bash if 语句 [: missing `]'不是重复if 条件中的错误括号:为什么我会收到没有空格的语法错误? ,据我所知,没有答案中的空白问题。我相信我在词典上有一个匹配,我认为这是一个不同的问题,需要一个解决方案。

Ter*_*ior 5

你确定错误是第一行吗?最后一个测试缺少一个空格。改变

[ "$_FOE_BRANCH" -ne "master"] && _BRANCH=$_FOE_BRANCH
Run Code Online (Sandbox Code Playgroud)

[ "$_FOE_BRANCH" -ne "master" ] && _BRANCH=$_FOE_BRANCH
Run Code Online (Sandbox Code Playgroud)

此外,由于您正在谈论sh,它可能不一定是 bash,您可以更改第一行以继续使用[而不是[[,这可能不适用于某些外壳:

if [ -z "$_BRANCH"  ] || [ "$_BRANCH" = "master" ]; then
Run Code Online (Sandbox Code Playgroud)