考虑两个条件表达式expr1和expr2,例如$i -eq $j和$k -eq $l。我们可以用bash多种方式编写。这有两种可能性
[[ expr1 || expr2 ]]
[[ expr1 ]] || [[ expr2 ]]
我相当确定我在这里看到了推荐使用第二种方法的建议,但是我找不到证据来支持这一点。
这是一个示例脚本,似乎证明没有区别:
for i in 0 1
do
for j in 0 1
do
for k in 0 1
do
for l in 0 1
do
if [[ $i -eq $j || $k -eq $l ]]; then printf "1-yes\t"; else printf "1-no\t"; fi
if [[ $i -eq $j ]] || [[ $k -eq $l ]]; then printf "2-yes\n"; else printf "2-no\n"; fi
done
done
done
done
输出显示两个条件构造产生相同的结果:
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
1-no 2-no
1-no 2-no
1-yes 2-yes
1-yes 2-yes
1-no 2-no
1-no 2-no
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
使用一个构造比另一个构造有什么好处吗?
对于加分,相同的问题,但使用||和推广到多个条件&&。例如,[[ expr1 && expr2 || expr3 ]]。
[或test(不是[[),OB在POSIX规范中test搜索标记(链接到“过时的”定义)。在test,有一些病理情况下,就不可能说,如果(还是)意在语法有意义的测试命令或字符串进行测试,那么,谁忽视了过时的标记和使用的语法人们实际需要的otherwise-过时的"x$foo"做法;使用[[,这不是问题。