2012-02-17 12 views
0

我知道至少有4種方法來測試shell腳本中的條件。shell腳本中用於條件的不同類型的支撐有什麼不同用途?

  • [ <cond> ];
  • [[ <cond> ]];
  • ((<cond>));
  • test <cond>;

我想有什麼,這些方法之間的差異是一個全面的概述,並且當使用其中方法。

我試過在網上搜索摘要,但沒有找到任何像樣的東西。在某個地方有一個體面的列表會很棒(棧溢出救援!)。

+1

不是總結,但請參閱本教程:http://tldp.org/LDP/abs/html/testconstructs.html和http://www.ibm.com/developerworks/library/l-bash-測試/ index.html的 – EricSonaron 2012-02-17 20:54:59

回答

1

讓我們在這裏描述它們。

首先,基本上有3種不同的測試方法

  • [ EXPRESSION ],這是完全一樣test EXPRESSION
  • [[ EXPRESSION ]]
  • ((EXPRESSION)),這是完全一樣let "EXPRESSION"

讓我們進入細節:

test

這是測試命令的祖父。即使你的shell不支持它,幾乎每個unix系統上仍然有一個/usr/bin/test命令。所以調用test將運行內置或二進制作爲後備。輸入$ type test查看使用哪個版本。同樣適用於[

在大多數基本情況下,這應該足以進行測試。

if [ "$a" = test -o "$a" = Test ]; 
if test "$a" = test -o "$a" = Test; 

如果你需要更多的力量,那麼就...

[[]]

這是特殊的一個bash。並非每個sh​​ell都需要支持這一點,並且沒有二進制回退。它提供了一個更強大的比較引擎,特別是pattern matching和正則表達式匹配。

if [[ "$a" == [Tt]es? ]]; # pattern 
if [[ "$a" =~ ^[Tt]es.$ ]]; # RE 

(())

這是一個bash特別用於算術表達式,並且是真,如果計算的結果是非零的。並非每個sh​​ell都需要支持這一點,並且沒有二進制回退。

if ((x * (1 + x++))); 
if let "x * (1 + x++)"; 

注中((...))let引用變量時,你可以省略$跡象。

1

在鏈接here的網站上,如果您向下滾動到[特殊字符,您會看到一個單獨的條目[[,並提供了一個鏈接來討論它們之間的差異。這裏還有一個((的條目。希望有所幫助!

相關問題