詳解shell腳本括號區別--$()、$「 」、$「 」 、$(()) 、「 」 、「[ 」]


概述

很多時候我們在寫shell腳本的時候總會碰到不同的括號,那么這些不同的括號有什么區別呢?


$()

用於命令交換

詳解shell腳本括號區別--$()、$「 」、$「 」 、$(()) 、「 」 、「[ 」]

 

說明:平時腳本用的``符號也是用於命令交換的哦,和$() 的操作是一樣的

詳解shell腳本括號區別--$()、$「 」、$「 」 、$(()) 、「 」 、「[ 」]

 

 


${ }

用於變量替換,這里每次調用環境的時候是需要帶一個${ } 但是不帶也不會影響

詳解shell腳本括號區別--$()、$「 」、$「 」 、$(()) 、「 」 、「[ 」]

 

這個定義了變量的范圍,比較不容易出錯


$[ ] --條件判斷用的比較多

用於算術計算,注意里面出現的只有數字

詳解shell腳本括號區別--$()、$「 」、$「 」 、$(()) 、「 」 、「[ 」]

 

如果在里面輸出其他非數字的就報錯:

詳解shell腳本括號區別--$()、$「 」、$「 」 、$(()) 、「 」 、「[ 」]

 


$(())

這個效果和$[ ] 差不多,兩個都是計算的

詳解shell腳本括號區別--$()、$「 」、$「 」 、$(()) 、「 」 、「[ 」]

 


[ ]

條件表達式

這是test命令的另一種形式,但要注意:

  • 1.必須在左括號的右側和右括號的左側各加一個空格,否則會報錯。
  • 2.test命令使用標准的數學比較符號來表示字符串的比較,而用文本符號來表示數值的比較。
  • 3.大於符號或小於符號必須要轉義,否則會被理解成重定向。
詳解shell腳本括號區別--$()、$「 」、$「 」 、$(()) 、「 」 、「[ 」]

 


[[ ]]

這個[[ ]]是 bash 程序語言的關鍵字。並不是一個命令,[[ ]] 結構比[ ]結構更加通用。在[[和]]之間所有的字符都不會發生文件名擴展或者單詞分割,但是會發生參數擴展和命令替換。

而且支持字符串的模式匹配,使用=~操作符時甚至支持shell的正則表達式。字符串比較時可以把右邊的作為一個模式,而不僅僅是一個字符串,比如[[ hello == hell? ]],結果為真。[[ ]] 中匹配字符串或通配符,不需要引號。

如果你使用[[ ... ]]條件判斷結構,而不是[ ... ],能夠防止腳本中的許多邏輯錯誤。比如,&&、||、<和> 操作符能夠正常存在於[[ ]]條件判斷結構中,但是如果出現在[ ]結構中的話,會報錯。比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不適用雙括號, 則為if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。

說明:bash把雙中括號中的表達式看作一個單獨的元素,並返回一個退出狀態碼。


(())

1、整數擴展。這種擴展計算是整數型的計算,不支持浮點型。((exp))結構擴展並計算一個算術表達式的值,如果表達式的結果為0,那么返回的退出狀態碼為1,或者 是"假",而一個非零值的表達式所返回的退出狀態碼將為0,或者是"true"。若是邏輯判斷,表達式exp為真則為1,假則為0。

2、只要括號中的運算符、表達式符合C語言運算規則,都可用在$((exp))中,甚至是三目運算符。作不同進位(如二進制、八進制、十六進制)運算時,輸出結果全都自動轉化成了十進制。如:echo $((16#5f)) 結果為95 (16進位轉十進制)

3、單純用 (( )) 也可重定義變量值,比如 a=5; ((a++)) 可將 $a 重定義為6

詳解shell腳本括號區別--$()、$「 」、$「 」 、$(()) 、「 」 、「[ 」]

 

4、常用於算術運算比較,雙括號中的變量可以不使用$符號前綴。括號內支持多個表達式用逗號分開。 只要括號中的表達式符合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 ]。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM