如何使用 bash 测试复杂表达式?

如何使用 bash 测试复杂表达式?

我只能做简单的表达,例如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 还具有算术扩展,当您比较变量时它会更好一些。

这里了解更多信息。

相关内容