bash 中 () {} [] [[]] (()) 的解釋
來源 https://www.cnblogs.com/fhefh/archive/2011/04/16/2017895.html
bash下有很多像{}、[]等一些符號命令,下面是我對一些常用的符號命令的學習筆記,若有錯誤或紕漏望各位兄弟指正。
一、.(source)
.(點)與source命令一樣,從文件中讀取並執行命令,無論該文件是否都有可執行權限都能夠正確的執行。且是在當前shell下執行,而不是產生一個子shell來執行(我們通常使用“./filename.sh”去執行一個文件是在當前shell下產生一個子shell去執行的)。所以在設置bash的環境的變量時,就必須用該命令或者source命令去執行設置的環境變量才會對當前shell生效,如下:
|
二、:
: 該命令什么都不做,但執行后會返回一個正確的退出代碼,即exit 0。比如在if語句中,then后面不想做任何操作,但是又不能空着,這時就可以使用“:”來解決,如下:
|
三、()
() 將多個命令組合在一起執行,相當於一個命令組。
四、{}
{} 和()類似,也是將多個命令組合在一起。它們之間的區別是,()是在產生的子shell下執行,而{}是在當前的shell下執行。這與前面講到是使用". filename.sh"和"./filename.sh"的區別一樣。舉一個很簡單的例子:
|
從上面的示例可以看出,當在()中賦值的變量,影響的只是自身的子shell,而不能將該值賦給父shell,因為“父親不能繼承兒子”。而在{}中賦值的變量,因為就在當前的shell執行的,所以就能改變原來變量的值。
注意:()里面兩邊可以不使用空格,{}里面兩邊必須使用空格,且最后一個命令也需要以“;”結尾,表示命令結束。
五、[](test)
[] 與test命令一樣,用於比較值以及檢查文件類型。如下:
1、[ "$A" = 123 ]:是字符串的測試,以測試 $A 是否為 1、2、3 這三個連續的"文字"。
2、[ "$A" -eq 123 ]:是整數的測試,以測試 $A 是否等於"一百二十三"。
3、[ -e "$A" ]:是關於文件的測試,以測試 123 這份"文件"是否存在。
六、[[]]
[[]]可以說是[]的“增強版”,它能夠將多個test命令支持的測試組合起來,例如:
|
至於這兩者的區別有位仁兄已經寫的很清楚了,我將其整理一下:
|
SPAN style="COLOR: rgb(0,1,2)">一致 |
拿這兩者對字符串的測試舉一個例子,如下:
|
字符串的比較是根據相應的ASCII碼來比較的,所以a>1是成立的。如果有興趣也可以思考一下為什么會出現下面的結果?
|
七、(())
(())專門來做數值運算,如果表達式求值為 0,則設置退出狀態為 1;如果求值為非 0 值,則設置為 0。不需要對 ((
和 ))
之間的操作符轉義。算術只對整數進行。除 0 會產生錯誤,但不會產生溢出。可以執行 C 語言中常見的算術、邏輯和位操作。如下:
|
也能:
|
除此之外,也可以使用$(())直接進行數值運算,如下:
|
注意:使用 (( )) 時,不需要空格分隔各值和運算符,使用[]和[[ ]] 時需要用空格分隔各值和運算符。
===================== End