#!/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个输出变为"输入错误"
答案 0 :(得分:1)
您可以使用set -xv
打开调试功能。它将向您显示问题:bash将[[ .. ]]
中的内容解释为字符串并使用-n
对其进行测试。它们都不是emtpy,因此它每次都是“真实的”。
要解决此问题,只需删除[[
和]]
即可。 Bash会正确地将true
和false
解释为在逻辑中运行和使用退出代码的命令。