3 回答
TA貢獻1785條經驗 獲得超4個贊
[與test內置相同,并且像test二進制(man test)一樣工作與
[許多類UNIX環境中的所有其他基于sh的shell一樣僅支持單一條件。使用bash
&&和||運算符進行的多次測試必須在單獨的括號中。本身不支持'not'運算符。要反轉條件,請使用
!第一個括號外部來使用shell的工具來反轉命令返回值。==并且!=是文字字符串比較[[是一個bash是特定于bash的,盡管其他shell可能已經實現了類似的構造。不要指望它在老式的UNIX sh中。
==并!=應用bash模式匹配規則,請參閱“模式匹配”man bash有一個
=~正則表達式匹配運算符允許使用括號和括號內的
!,&&和||邏輯運算符來組合子表達式
除此之外,它們非常相似 - 大多數單獨的測試在它們之間的工作方式相同,當您需要將不同的測試與邏輯AND / OR / NOT操作組合時,事情才會變得有趣。
TA貢獻1877條經驗 獲得超1個贊
最重要的區別在于代碼的清晰度。是的,是的,上面說的是真的,但是[[]]使你的代碼符合你在高級語言中所期望的,特別是關于AND(&&),OR(||)和NOT(!)運營商。因此,當您在系統和語言之間移動時,您將能夠更快地解釋腳本,從而使您的生活更輕松。從一個好的UNIX / Linux參考中獲取細節。您可能會發現某些細節在某些情況下有用,但您將始終欣賞清晰的代碼!您更喜歡閱讀哪個腳本片段?即使脫離背景,第一選擇也更容易閱讀和理解。
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 ...添加回答
舉報
