复合if / logical XOR bash bug?

时间:2014-12-12 16:04:20

标签: bash xor logical-operators

#!/bin/bash

function logic_test()
{
    left_bracket=$1
    right_bracket=$2

    if [[ ($left_bracket || $right_bracket) && ! ($left_bracket && $right_bracket) ]]
    then
        errEcho "Input error: insertIntoConfigFile arg1 does not contain matching []."
    else
        errEcho "Passed"
    fi
}

logic_test true true
logic_test true false
logic_test false true
logic_test false false

预期结果,根据XOR的功能:

Passed
Input Error
Input Error
Passed

4.3.11(1)中的实际结果 - 发布

Passed
Passed
Passed
Passed

我在XOR实现中没有看到一些微不足道的东西,或者是if逻辑错误?如果是错误,我该如何提交错误?

我认为这可能是一个错误......如果我将if改为

if [[ ($left_bracket && !$right_bracket) || (!$left_bracket && $right_bracket) ]]

然后所有4个输出变为"输入错误"

1 个答案:

答案 0 :(得分:1)

您可以使用set -xv打开调试功能。它将向您显示问题:bash将[[ .. ]]中的内容解释为字符串并使用-n对其进行测试。它们都不是emtpy,因此它每次都是“真实的”。

要解决此问题,只需删除[[]]即可。 Bash会正确地将truefalse解释为在逻辑中运行和使用退出代码的命令。