【问题标题】: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 的否定
仅当一个值为真时才产生输出
祝你有美好的一天