首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在同一级别使用多个"and“或" or”编写测试?

如何在同一级别使用多个"and“或" or”编写测试?
EN

Stack Overflow用户
提问于 2017-10-06 20:27:08
回答 2查看 58关注 0票数 1

bash test似乎不支持带有多个参数的逻辑测试:

代码语言:javascript
复制
[ expr1 -o expr2 -o expr3 -o expr4 ]

nor

代码语言:javascript
复制
[[ expr1 || expr3 || expr3 || expr4 ]]

'-a‘和'&&’也是如此。如何在没有太多嵌套大括号的情况下以整齐的方式编写这样的条件(特别是.当有更多的部件处于状态时)?

EN

回答 2

Stack Overflow用户

发布于 2017-10-06 20:40:31

似乎bash test不支持带有多个参数的逻辑测试

它确实是:

代码语言:javascript
复制
$ [ 0 -le 1 -a 1 -le 2 ] && echo yes
yes
$ [[ 0 -le 1 && 1 -le 2 ]] && echo yes
yes
$ [ 0 -ge 1 -o 1 -ge 2 ] || echo no
no
$ [[ 0 -ge 1 || 1 -ge 2 ]] || echo no
no

test手册页上写道:

注意:二进制-a和-o本质上是不明确的。改为使用'test EXPR1 && test EXPR2‘或'test EXPR1 || test EXPR2’。

如果您的问题更多地是关于运算符的优先级,请注意&&|| bash列表运算符具有相同的优先级和左结合性。因此,有时需要对子表达式进行分组:

代码语言:javascript
复制
{ [[ expr1 ]] && [[ expr2 ]]; } || { [[ expr3 ]] || [[ expr4 ]]; }

但它很简单,很容易理解。

票数 3
EN

Stack Overflow用户

发布于 2017-10-06 20:41:34

下面的示例适用于我在Bash 4中的工作,例如

代码语言:javascript
复制
$ [ 1 = 1 -a 2 = 2 -a 3 = 3 -a 4 = 4 ] && echo True || echo False
True
$ [ 1 = 1 -a 2 = 2 -a 3 = 3 -a 4 = 0 ] && echo True || echo False
False
$ [ 1 = 1 -o 2 = 2 -o 3 = 3 -o 4 = 4 ] && echo True || echo False
True
$ [ 1 = 1 -o 2 = 0 -o 3 = 0 -o 4 = 0 ] && echo True || echo False
True
$ [ 1 = 0 -o 2 = 0 -o 3 = 0 -o 4 = 0 ] && echo True || echo False
False

根据man [ (或man test):

对于两端,始终使用-a-o进行评估。

要避免这种情况,请编写:[ -z abc ] && [ -w file ].

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46605743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档