【发布时间】:2016-06-28 18:04:36
【问题描述】:
这个问题与许多潜在的重复问题不同,我无法找到这个特定问题的答案甚至被问到......
也许我在这里忽略了一些简单的逻辑,但我遇到了以下问题:
我正在尝试创建一个if 语句,其中必须满足$V1 和$V2 等条件为真||或$V3 和$V4 为真。这是一个简单的测试:
#!/bin/bash
V1="File Placeholder"
#echo $V1
V2="May contain some text"
#echo $V2
V3="Some command output"
#echo $V3
V4="Command output contains this text"
#echo $V4
if [[ "$V1" ]] && [[ "$V2" == *"contain some"* ]] || [[ "$V3" ]] && [[ "$V4" == *"output contains"* ]]
then
echo "Hello $V1"
echo "World full of: $V2"
fi
意思是,如果:
$V1 为真(文件存在)
和
$V2 为真(找到了一些字符串)
或
$V3 为真(即不为空)
和
$V4 为真(命令输出包含文本)
它似乎有点工作,但我意识到它不能正常工作:如果第二个&& 条件都是 FALSE 即:|| [[ "$V6" ]] && [[ "$V4" == *"output contains"* ]],它不会返回 TRUE(为什么我认为我可能忽略了一些逻辑,也许会以某种方式被取消?)。
为什么这不起作用,因为我认为它会 if a AND b are TRUE ... OR ... if x AND z are TRUE?
【问题讨论】:
-
谢谢!第三个示例“评估顺序”看起来可能是我需要的。我会试一试并报告。
-
shell 运算符
&&和||具有相同的优先级,这与大多数语言中常用的布尔运算符不同。也就是说,a || b && c与(a || b) && c相同,而不是a || (b && c)。
标签: bash if-statement operators