【问题标题】:How to return True if only one variable of three is True in BASH?如果 BASH 中只有三个变量中的一个为 True,如何返回 True?
【发布时间】:2020-01-20 07:44:08
【问题描述】:

如果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

我需要一个逻辑表达式,仅当一个变量为真时才返回真。 我尝试使用

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

谢谢

【问题讨论】:

标签: bash if-statement scripting


【解决方案1】:

您可以对这些值求和并检查结果是否等于 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

【讨论】:

    【解决方案2】:

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

    xor 所有值并删除 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 是 a b 和 c 的异或,g 是 a&b&c 的否定 仅当一个值为真时才产生输出

    祝你有美好的一天

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 2022-12-11
      • 2019-08-16
      • 2021-01-26
      • 1970-01-01
      • 2014-07-12
      • 2017-02-28
      相关资源
      最近更新 更多