如果BASH中只有三个变量为True,如何返回True?

时间:2019-09-19 09:45:58

标签: bash if-statement scripting

如果BASH中只有三个变量为True,如何返回True?

我有三个布尔变量:

a|b|c|
1 1 1 False
1 1 0 False
1 0 1 False
1 0 0 True
0 1 1 False
0 1 0 True
0 0 1 True
0 0 0 False

我需要一个仅在一个变量为true时才为true的逻辑表达式。 我尝试

if  [[ ( $a == 1 || $b == 1 || $c == 1 ) && ( $a == 1  &&  $b == 1  &&  $c == 1 ) ]];  then
  return True
fi

谢谢

2 个答案:

答案 0 :(得分:7)

您可以对值求和并检查结果是否等于1。

在这里,我正在使用算术表达式对数字求和并检查是否相等。

#! /bin/bash
for a in 0 1 ; do
    for b in 0 1 ; do
        for c in 0 1 ; do
            printf '%s ' $a $b $c
            (( 1 == a + b + c )) && echo True || echo False
        done
    done
done

答案 1 :(得分:1)

这是我收集的逻辑 (a ^ b ^ c)和〜(a&b&c)

对所有值进行“或”运算,并删除所有abc值为真的情况 真值表

a b c f = a ^ b ^ c g =〜(a&b&c)h = f&g

0 0 0 0 1 0

0 0 1 1 1 1

0 1 0 1 1 1

0 1 1 0 1 0

1 0 0 1 1 1

1 0 1 0 1 0

1 1 0 0 1 0

1 1 1 1 0 0

其中,f是b与c的异或,而g是a&b&c的负数 仅当一个值为true时输出才会产生

祝你愉快