Shell中括號的作用

2022-07-12 23:45:22 字數 2168 閱讀 7754

①.命令組。括號中的命令將會斷開乙個子shell順序執行,所以括號中的變數不能被指令碼餘下的部分使用。括號中多個命令之間用分號隔開,最後乙個命令可以沒有分號,各命令和括號之間不必有空格。

②.命令替換。等同於`cmd`,shell掃瞄一遍命令列,發現了$(cmd)結構,便將$(cmd)中的cmd執行一次,得到其標準輸出,再將此輸出放到原來命令。有些shell不支援,如tcsh。

③.用於初始化陣列。如:array=(a b c d)

①.整數擴充套件。這種擴充套件計算是整數型的計算,不支援浮點型。((exp))結果擴充套件並計算乙個算術表示式的值,如果表示式的結果為0,那麼返回的退出狀態碼1,或者是「假」,而乙個非零值的表示式所返回的退出狀態碼將為0,或者是「true」。若是邏輯判斷表示式exp為1則真,為0則假。

例如:[root@localhost ~]# echo $((1+2));echo $?30

[root@localhost ~]# echo $((1.1+2.2))

-bash: 1.1+2.2: syntax error: invalid arithmetic operator (error token is ".1+2.2")

[root@localhost ~]# echo $?

1②.只要括號中的運算子、表示式符合c語言運算規則,都可用在$(())中,甚至是三目運算子。做不同進製運算,輸出結果全部轉化成了十進位制。如下所示:

[root@localhost ~]# echo $((16#5f))

95           #即將16進製制5f轉換為十進位制95

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

④.常用於算術運算比較雙括號中的變數可以不使用$符號字首。括號內支援多個表示式用分號分開。只要括號中的表示式符合c語言運算規則,比如可以直接使用:for ((i=0;i<5;i++)),如果不使用雙括號,則為:for i in `seq 4`或者for i in 。再如可以直接使用if (($i<5)),如果不使用雙括號,則未if [ $i -lt 5 ]。

①.bash內部命令,「[」和test是等同的。如果我們不用絕對路徑指明,通常我們用的都是bash自帶的命令。if/test結構總共的左中括號是呼叫test的命令標識,有中括號是關閉條件判斷的。這個命令把它的引數作為比較表示式或者作為檔案測試,並且根據比較的結果來返回乙個退出狀態碼。

②.test和中可用的比較運算子只有==和!=,兩者都是用於字串比較的,不可用於整數比較,整數比較只能使用-eq,-gt這種形式。無論是字串比較還是整數比較都不支援大於號小於號。如果實在想用,可以使用轉義字元,如下面這樣:[ ab \< bc ],結果為真返回0,[ ]中的邏輯與和邏輯或使用-a和-o表示。

③.字元範圍。用作正規表示式的一部分,描述乙個匹配的字元範圍。

④.在乙個array結構的上下文中,中括號用來引用陣列中每個元素的編號。

①.[[ ]]結構比[ ]結構更加通用。

②.支援字串的模式匹配,字串比較時可以把右邊的作為乙個模式,而不僅僅是乙個字串,[[ hello == hell? ]],結果為真。

③.使用[[...]]條件判斷結構,而不是[...],能夠防止指令碼中的許多邏輯錯誤。比如,&&、||操作符能夠正常存在於條件為判斷結構中,如果使用在就會出錯。

例如:

if [ $a -ne 1 -a $a != 2 ]    

if [ $a -ne 1] && [ $a != 2 ]

if [[ $a != 1 && $a != 2 ]]

①.對大括號中的檔名做擴充套件。比如:touch .txt結果為:a.txt、d.txt。touch .txt結果為:a.txt、b.txt、c.txt、d.txt。。

②.**塊,又被稱為內部組,這個結構事實上建立了乙個匿名函式。與小括號中的命令不同,大括號內的命令不會新開乙個子shell執行,即指令碼餘下部分仍可使用括號內變數。括號內的命令間用分號隔開,最後乙個也必須有分號。的第乙個命令和左括號之間必須有乙個空格。

①.$ 變數a的值,在不引起歧義的情況下可以省略大括號。

②.$(cmd) 命令替換,和`cmd`效果相同。

③.$((expression))和`expression`效果相同,計算數學表示式exp的數值,其中exp只要符合c語言的運算規則即可,甚至三目運算子和邏輯表示式都可以計算。

①.單小括號:(cmd1;cmc2;cmd3)

②.單大括號:

shell中的括號

在編寫shell scripts時,經常會用到括號,各種括號,各種用法。一 括號 圓括號 1 單小括號。命令組。括號中的命令將會新開乙個子shell順序執行,所以括號中的變數不能夠被指令碼餘下的部分使用。括號中多個命令之間用分號隔開,最後乙個命令可以沒有分號,各命令和括號之間不必有空格。命令替換。等...

shell中的括號

一 括號 圓括號 1 單小括號。命令組。括號中的命令將會新開乙個子shell順序執行,所以括號中的變數不能夠被指令碼餘下的部分使用。括號中多個命令之間用分號隔開,最後乙個命令可以沒有分號,各命令和括號之間不必有空格。命令替換。等同於 cmd shell掃瞄一遍命令列,發現了 cmd 結構,便將 cm...

shell中的括號

假設我們定義了乙個變數為 file dir1 dir2 dir3 my.file.txt 拿掉第一條 及其左邊的字串 dir1 dir2 dir3 my.file.txt 拿掉最後一條 及其左邊的字串 my.file.txt 拿掉第乙個 及其左邊的字串 file.txt 拿掉最後乙個 及其左邊的字串...