3 回答

TA貢獻1785條經(jīng)驗 獲得超4個贊
[
與test
內(nèi)置相同,并且像test
二進制(man test)一樣工作與
[
許多類UNIX環(huán)境中的所有其他基于sh的shell一樣僅支持單一條件。使用bash
&&
和||
運算符進行的多次測試必須在單獨的括號中。本身不支持'not'運算符。要反轉(zhuǎn)條件,請使用
!
第一個括號外部來使用shell的工具來反轉(zhuǎn)命令返回值。==
并且!=
是文字字符串比較[[
是一個bash是特定于bash的,盡管其他shell可能已經(jīng)實現(xiàn)了類似的構(gòu)造。不要指望它在老式的UNIX sh中。
==
并!=
應(yīng)用bash模式匹配規(guī)則,請參閱“模式匹配”man bash
有一個
=~
正則表達式匹配運算符允許使用括號和括號內(nèi)的
!
,&&
和||
邏輯運算符來組合子表達式
除此之外,它們非常相似 - 大多數(shù)單獨的測試在它們之間的工作方式相同,當您需要將不同的測試與邏輯AND / OR / NOT操作組合時,事情才會變得有趣。

TA貢獻1877條經(jīng)驗 獲得超1個贊
最重要的區(qū)別在于代碼的清晰度。是的,是的,上面說的是真的,但是[[]]使你的代碼符合你在高級語言中所期望的,特別是關(guān)于AND(&&),OR(||)和NOT(!)運營商。因此,當您在系統(tǒng)和語言之間移動時,您將能夠更快地解釋腳本,從而使您的生活更輕松。從一個好的UNIX / Linux參考中獲取細節(jié)。您可能會發(fā)現(xiàn)某些細節(jié)在某些情況下有用,但您將始終欣賞清晰的代碼!您更喜歡閱讀哪個腳本片段?即使脫離背景,第一選擇也更容易閱讀和理解。
if [[ -d $newDir && -n $(echo $newDir | grep "^${webRootParent}") && -n $(echo $newDir | grep '/$') ]]; then ...
要么
if [ -d "$newDir" -a -n "$(echo "$newDir" | grep "^${webRootParent}")" -a -n "$(echo "$newDir" | grep '/$')" ]; then ...
添加回答
舉報