shell一些技巧和知識點 ; 表示的是一個命令執行完, 忽略其傳回值, 繼續執行下一行 www.2cto.com && 表示只有前面為true才繼續執行後面的命令, 否則忽略, 可以理解為短路執行 || 表示子前面為false才繼續執行後面的命令, 這個比以前看到的解釋更容易理解 凡是要輸出字串的, 最好用引號括起來, 否則容易被shell理解為命令, 這一點很容易疏忽 {}是一種命令塊的寫法 :可以看成append操作 www.2cto.com export用來將一個變數升級為環境變數 str= 這行代碼錶示將str這個變數設定為null ${str:-+=expr} 這些操作忘記了, 還需要鞏固一下 source會將script看成當前shell進程的一部分, 而不是產生一個sub shell進程來執行指令碼, source用來載入公用的函數, 可以理解為import exec用來結束當前shell進程, 並重建一個新的進程來執行指令碼 ()用來將多個命令放到一個sub shell進程中去執行, 可以理解為將運算式變成函數 {} 理解成匿名函數吧, 一般在awk中常見 $()和``是一回事, 不過前者辨識度更高, 建議常用, 後者容易與''混淆, 另外一個前者嵌套起來更簡單, 不過前者移植性較差 ${}除了用來界定變數之外, 還有一個功能實現字串變數的substring操作, #表示去掉左邊的, %表示去掉右邊的, 單數表示最小匹配, 雙數表示最大匹配, 可以通過鍵盤上#和%相對於$的位置來記憶, linux上的命令參數大部分記憶起來很傷腦筋:( ${}還可以用來設定預設值, 這塊更複雜, 不記也罷 ${#str}用來計算變數的字元長度 ()的另一個作用是用來定義一個數組, 而針對數組的訪問則利用的是[], 注意數組的下標base是0, 另外@用來表示全部, 可以理解為all $(())只針對算數和邏輯運算, 裡面的變數可以不用帶上$首碼, 當然帶上也不為錯 shell中的0表示true, 非零表示false (())用來直接進行運算, 會讓我們的代碼更簡潔, 比如變數不用加$首碼 $0表示的是指令碼路徑, $1...n代表的是指令碼路徑之後的參數 函數可以理解為指令碼中的指令碼, 不過函數中$0表示的仍然是指令碼路徑, 而不是函數名 $10不是表示第十個參數而是第一個參數後面帶一個0 一般#跟數量關係比較大, 比如${#str}表示變數長度, 而$#表示參數個數, 測試是否有傳參數 [ $# = 0 ]