shell中各種括號()、(())、[]、[[]]、{}的作用和區別


參考:https://blog.csdn.net/u013402321/article/details/80333272

$()和 ` `  

在 bash shell 中,$( ) 與` ` (反引號) 都可用做命令替換用。

例如   

version=$(uname -r)和version=`uname -r`都可以是version得到內核的版本號

各自的優缺點:
1. `  ` 基本上可用在全部的 unix shell 中使用,若寫成 shell script ,其移植性比較高,但反單引號容易打錯或看錯。

2. $()並不是所有shell都支持。

 

${ } 

${ }用於變量替換。一般情況下,$var 與${var} 並沒有什么不一樣,但是用 ${ } 會比較精確的界定變量名稱的范圍。

例如

$ A=B
$ echo $AB
原本是打算先將 $A 的結果替換出來,然后再補一個 B 字母於其后,但在命令行上,真正的結果卻是只會提換變量名稱為 AB 的值出來…
若使用 ${ } 就沒問題了:
$ echo ${A}B
BB

${ }的模式匹配功能:

# 是去掉左邊(在鍵盤上#在$之左邊)
% 是去掉右邊(在鍵盤上%在$之右邊)
#和%中的單一符號是最小匹配,兩個相同符號是最大匹配。

${variable#pattern}:shell在variable中查找,看它是否以給定的模式pattern開始,如果是,就從命令行把variable中的內容去掉左邊最短的匹配模式

${variable##pattern}:shell在variable中查找,看它是否以給定的模式pattern開始,如果是,就從命令行把variable中的內容去掉左邊最長的匹配模式

${variable%pattern}:shell在variable中查找,看它是否以給定的模式pattern結尾,如果是,就從命令行把variable中的內容去掉右邊最短的匹配模式

${variable%%pattern}:shell在variable中查找,看它是否以給定的模式pattern結尾,如果是,就從命令行把variable中的內容去掉右邊最長的匹配模式

這四種模式中都不會改變variable的值,其中,只有在pattern中使用了*匹配符號時,%和%%,#和##才有區別。結構中的pattern支持通配符,*表示零個或多個任意字符,?表示僅與一個任意字符匹配,[...]表示匹配中括號里面的字符,[!...]表示不匹配中括號里面的字符。

 

$[] $(()) 

$[]和$(())是一樣的,都是進行數學運算的。支持+ - * / %(“加、減、乘、除、取模”)。但是注意,bash只能作整數運算,對於浮點數是當作字符串處理的。
例如:
$ a=5; b=7; c=2
$ echo $(( a+b*c ))
19
$ echo $(( (a+b)/c ))
6
$ echo $(( (a*b)%c))
1

在 $(( )) 中的變量名稱,可於其前面加 $ 符號來替換,也可以不用,如:
$(( $a + $b * $c)) 也可得到 19 的結果
此外,$(( )) 還可作不同進位(如二進制、八進位、十六進制)運算,只是,輸出結果皆為十進制而已:

echo $((16#2a)) 結果為 42 (16進位轉十進制)

 

[ ] 

為test命令的另一種形式,但要注意:
1.必須在左括號的右側和右括號的左側各加一個空格,否則會報錯。
2.test命令使用標准的數學比較符號來表示字符串的比較,而用文本符號來表示數值的比較。

3.大於符號或小於符號必須要轉義,否則會被理解成重定向。

 

(( ))及[[ ]] 

分別是[ ]的針對數學比較表達式和字符串表達式的加強版。

其中

[[ ]]中增加模式匹配特效;

(( ))不需要再將表達式里面的大小於符號轉義,除了可以使用標准的數學運算符外,還增加了以下符號:

 


免責聲明!

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



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