$()shell
用做命令替換,同``,如var=`ls` 和var=$(ls)的結果同樣spa
可使用echo $var | xargs –n 1查看命令行
${}字符串
用做變量替換,與$相似,可是能夠作形如var=${A}B這種工做,即在變量A後面增長一個B,能夠認爲是增強版的$Atest
$(())變量
用於計算,一樣可用於計算的還有let, expr擴展
如語法
res=$((5+2))im
let res=5+2重定向
res=`expr 5 + 2`
[[]]與[]
一、 前者「[[」是關鍵字,後者是內建命令,至關於test ;
二、 邏輯判斷用法不一致
[ : -a –o
[[ : && ||
三、 對於[]來講,要用-eq 等進行數字比較,而不能傳入字符串和數字進行比較,而在[[]]中會把字符串直接轉爲0;當比較的變量爲空時,使用[]就會報錯,而[[]]不存在這種問題
如
四、 [[]]能夠用於算術運算,而[]不行
如:
[[ 99+1 –eq 100 ]] true
[ 99+1 –eq 100 ] 報錯, 但可使用[ $((99+1)) –eq100 ]
五、 命令行參數的區別
1) [ ... ]爲shell命令,因此在其中的表達式應是它的命令行參數,因此串比較操做符">" 與"<"必須轉義,不然就變成IO重定向了;
如: [ 0 \< 1] 與[[ 0 < 1]]
2) 因爲"[["是關鍵字,不會作命令行擴展,因此在[[中"<"與">"不需轉義,可是相對的語法就稍嚴格些。例如在[ ... ]中能夠用引號括起操做符,由於在作命令行擴展時會去掉這些引號,而在[[ ... ]]則不容許這樣作;
$[[ "-z" "" ]] 報錯,而$[「-z」 「」] true