如何用bashtesting复杂的expression式?

我只能做简单的expression式,如1=1 and 0=1

 test 1 = 1 -a 0 = 1 

但如何做复杂的expression式,如1=1 and (0=1 or 1=1)

要么使用多个testing呼叫:

 test 1 = 1 && test 0 = 1 -o 1 = 1 

要么 [[:

 [[ 1 = 1 && (0 = 1 || 1 = 1) ]] 

只要你小心,你可以使用test或记住括号必须逃脱,条款必须用空格分开:

 if [ \( a = a \) -a \( a = b -ob = b \) ] then echo Yes else echo No fi 

这对我来说是“是的”。 不过,使用Bash和Korn shell [[ ]]运算符通常更容易; 你不必做太多的转义。

这个问题已经被回答了,但是你可能会考虑一些样式提示(也许会拒绝:-)):

如果你是写它的人,发现它令人困惑,那么也许:

  • 即使不需要使用extra(),也可以使其更清晰。
  • 也可能使用嵌套循环,而不是大量的和语句。

弗洛里安大部分都是正确的,但请记住,bash也有算术扩展,比较variables时更好一些。

在这里看到更多的信息。