shell中的單層大/中/小括號、雙層大中小括號、命令替換等
參考:https://www.cnblogs.com/itxdm/p/something_of_shellscirpt.html
https://www.cnblogs.com/hanggegege/p/5928870.html
https://blog.csdn.net/ztf312/article/details/52317571
簡要描述:
1、單小括號( ):把括號內的命令在另一個shell執行,並把結果返回,左右不留空格,一般要帶字首 $
雙小括號(( )) :整數比較、四則運算,括住的內容,完全符合C語言語法,一般要帶字首 $
2、單中括號[ ]:類似於測試命令(數字、字串、檔案三者的判斷),左右必須留空格,特殊字元需用轉義符\,一般用於if語句
雙中括號[[ ]]:功能類似於單中括號,區別在於特殊字元無需轉義,而且支援>、<等符號判斷
3、單大括號{ }:快速替換
4、單反引號``:命令替換
一、小括號
1、單層小括號( ),執行shell命令並取得輸出,例如:var=$(ls)、echo $(ls)
2、雙層小括號(( )),內部可以
echo $((3+2)) 輸出5 echo $((3>2)) 輸出1 echo $((25<3 ? 2:3)) 輸出3 echo $var echo $((var=2+3)) 輸出5 echo $var echo $((var++)) 輸出5,顯然符合c語言特性 echo $var 輸出6
二、中括號,[ ]、[[ ]]都類似於test命令,一般用於if語句。http://www.runoob.com/linux/linux-shell-test.html
單雙中括號的共同點:
(1) 功能都是用於數字、字串、檔案三者的判斷,字串比較只能用==、!=、-z、-n,數字比較用-eq、-gt等,檔案判斷用-e -d等,取非用!,詳情查閱test參考連結
(2) 兩者左右兩邊都要留空格、運算子兩邊都要留空格!!!
兩者的區別:
(1) 轉義方面:若[ ]中出現特殊字元如( ),則左右小括號都要轉義,寫成\(\);而[[ ]]無需轉義
(2) 判斷運算子、邏輯運算子,分別支援哪些?(部分如下)
[ ]支援 | -eq | -gt | -ge | -a | -o |
[[ ]]支援 | ==和-eq | >和-gt | -ge、 不支援>= | && | || |
1、單中括號 [ ]
a=3
str="ab"
filePath=./hello.c #右值的單雙引號可用可不用
if [ 3 -eq $a ]; then echo yes; fi #數字判斷:輸出yes
if [ $str!="cd" ]; then echo yes; fi #字串判斷:輸出yes
if [ -e filePath ]; then echo yes; fi #檔案判斷:若存在則輸出yes
2、雙中括號[[ ]]
if [[ 3 > 2 && 3 < 2 ]]; then echo yes; fi #數字比較示例:輸出yes
變數呼叫:
方法(1):${var}
方法(2):$var
命令呼叫:
方法(1):`COMMAND`
方法(2):$(COMMAND)
測試表達式:
方法(1):[ expression ]
方法(2):[[ expression ]]
方法(3):test expression
算術運算
方法(1):let 算術運算表示式
let C=$A+$B 這裡變數A和B前面的$可以省略
方法(2):$[算術運算表示式]
C=$[$A+$B]
方法(3):$((算術運算表示式))
C=$(($A+$B)) #參考雙( )的用法
方法(4):expr 算術運算表示式,表示式中各運算元及運算子之間要有空格,而且要使用命令引用,遇到乘法的*號還要轉義
C=`expr $A + $B` #參考單反引號的用法
或C=$(expr $A + $B) #參考單( )的用法
方法(5):expr $[算術運算表示式],遇到乘法*號不用轉義。