我知道至少有4種方法來測試shell腳本中的條件。shell腳本中用於條件的不同類型的支撐有什麼不同用途?
[ <cond> ];
[[ <cond> ]];
((<cond>));
test <cond>;
我想有什麼,這些方法之間的差異是一個全面的概述,並且當使用其中方法。
我試過在網上搜索摘要,但沒有找到任何像樣的東西。在某個地方有一個體面的列表會很棒(棧溢出救援!)。
我知道至少有4種方法來測試shell腳本中的條件。shell腳本中用於條件的不同類型的支撐有什麼不同用途?
[ <cond> ];
[[ <cond> ]];
((<cond>));
test <cond>;
我想有什麼,這些方法之間的差異是一個全面的概述,並且當使用其中方法。
我試過在網上搜索摘要,但沒有找到任何像樣的東西。在某個地方有一個體面的列表會很棒(棧溢出救援!)。
讓我們在這裏描述它們。
首先,基本上有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。並非每個shell都需要支持這一點,並且沒有二進制回退。它提供了一個更強大的比較引擎,特別是pattern matching和正則表達式匹配。
if [[ "$a" == [Tt]es? ]]; # pattern
if [[ "$a" =~ ^[Tt]es.$ ]]; # RE
(())
這是一個bash特別用於算術表達式,並且是真,如果計算的結果是非零的。並非每個shell都需要支持這一點,並且沒有二進制回退。
if ((x * (1 + x++)));
if let "x * (1 + x++)";
注中((...))
或let
引用變量時,你可以省略$
跡象。
在鏈接here的網站上,如果您向下滾動到[
特殊字符,您會看到一個單獨的條目[[
,並提供了一個鏈接來討論它們之間的差異。這裏還有一個((
的條目。希望有所幫助!
不是總結,但請參閱本教程: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