sh 测试两个条件获取[:缺少`]'

sh 测试两个条件获取[:缺少`]'

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

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

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

[: missing `]'

对于这条线

if [ -z "$_BRANCH"  ] || [[ "$_BRANCH" = "master" ]]; then

但当我阅读并试图清除它时,我一直在循环。我预计一切都会好起来的https://stackoverflow.com/a/16138899/746758

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

答案1

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

[ "$_FOE_BRANCH" -ne "master"] && _BRANCH=$_FOE_BRANCH

[ "$_FOE_BRANCH" -ne "master" ] && _BRANCH=$_FOE_BRANCH

另外,既然你说的是,这可能不一定是 bash,您可以更改第一行以继续使用[而不是[[,这可能在某些 shell 上不起作用:

if [ -z "$_BRANCH"  ] || [ "$_BRANCH" = "master" ]; then

相关内容