Shell中的括號有其特殊的用法, 現總結以下:shell
1. 符號$後的括號ide
${a} 變量a的值, 在不引發歧義的狀況下能夠省略大括號.測試
$(cmd) 命令替換, 結果爲shell命令cmd的輸出, 和`cmd`效果相同, 不過某些Shell版本不支持$()形式的命令替換, 如tcsh.spa
$((exp)) 和`expr exp`效果相同, 計算數學表達式exp的數值, 其中exp只要符合C語言的運算規則便可, 甚至三目運算符和邏輯表達式均可以計算.字符串
2. 多條命令執行cmd
(cmd1;cmd2;cmd3) 新開一個子shell順序執行命令cmd1,cmd2,cmd3, 各命令之間用分號隔開, 最後一個命令後能夠沒有分號.數學
{ cmd1;cmd2;cmd3;} 在當前shell順序執行命令cmd1,cmd2,cmd3, 各命令之間用分號隔開, 最後一個命令後必須有分號, 第一條命令和左括號之間必須用空格隔開.it
對{}和()而言, 括號中的重定向符隻影響該條命令, 而括號外的重定向符影響到括號中的全部命令.class
3. 雙括號的特殊用法變量
(()) 加強括號的用法, 經常使用於算術運算比較. 雙括號中的變量能夠不使用$符號前綴, 只要括號中的表達式符合C語言運算規則, 支持多個表達式用逗號分開.
好比能夠直接使用for((i=0;i<5;i++)), 若是不使用雙括號, 則爲for i in `seq 0 4`或者for i in {0..4}.
再如能夠直接使用if (($i<5)), 若是不使用雙括號, 則爲if [ $i -lt 5 ].
[[]] 加強方括號用法, 經常使用於字符串的比較. 主要用於條件測試, 雙括號中的表達式能夠使用&&, ||, <, >等C語言語法.
好比能夠直接使用if [[ $a != 1 && $a != 2 ]], 若是不適用雙括號, 則爲if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ].