如何使用 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

您可以使用testor [...,]只要您小心,記住括號必須轉義並且術語必須用空格分隔:

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

這對我來說是“是”。不過,使用 Bash 和 Korn shell [[...]]運算子通常更容易;你不必做那麼多的逃避。

答案3

問題已經得到解答,但您可能會考慮一些風格提示(也可能會拒絕:-)):

如果你是寫它的人,並且發現它令人困惑,那麼也許:

  • 即使不需要,使用 extra () 可能會更清楚。
  • 也可以使用巢狀迴圈而不是大量的 and 語句。

答案4

上面的弗洛里安基本上是正確的,但請記住,bash 也有算術擴展,當您比較變數時,這會更好一些。

這裡了解更多。

相關內容