我只能做简单的表达,例如1=1 and 0=1
test 1 = 1 -a 0 = 1
但是像这样的复杂表达式该如何做呢1=1 and (0=1 or 1=1)
?
答案1
使用多个测试调用:
test 1 = 1 && test 0 = 1 -o 1 = 1
或者 [[:
[[ 1 = 1 && (0 = 1 || 1 = 1) ]]
答案2
您可以使用test
或[
...,]
只要您小心,记住括号必须转义并且术语必须用空格分隔:
if [ \( a = a \) -a \( a = b -o b = b \) ]
then echo Yes
else echo No
fi
对我来说,答案是“是”。不过,通常使用 Bash 和 Korn shell [[
...]]
操作符会更简单;你不必进行太多转义。
答案3
问题已经得到解答,但您可能会考虑(也可能拒绝:-))几个风格提示:
如果你是写这篇文章的人,并且发现它令人困惑,那么也许:
- 即使不需要,也使用额外的(),可能会更清楚。
- 或者也可以使用嵌套循环来代替大量的 and 语句。
答案4
Florian 在上面大部分都是正确的,但请记住,bash 还具有算术扩展,当您比较变量时它会更好一些。
看这里了解更多信息。