轉載自shell
https://blog.csdn.net/x1269778817/article/details/46535729編程
參考:bash
https://stackoverflow.com/questions/669452/is-double-square-brackets-preferable-over-single-square-brackets-in-ba.net
https://unix.stackexchange.com/questions/68694/when-is-double-quoting-necessary命令行
$()和 ` ` :unix
在 bash shell 中,$( ) 與` ` (反引號) 都是用來作命令替換用(commandsubstitution)的。blog
例如 version=$(uname -r)和version=`uname -r`均可以是version獲得內核的版本號ip
各自的優缺點:
1. ` ` 基本上可用在所有的 unix shell 中使用,若寫成 shell script ,其移植性比較高。但反單引號容易打錯或看錯。字符串
2. $()並非全部shell都支持。字符串處理
${ } :
${ }用於變量替換。通常狀況下,$var 與${var} 並無啥不同。可是用 ${ } 會比較精確的界定變量名稱的範圍。好比
$ A=B
$ echo $AB
本來是打算先將 $A 的結果替換出來,而後再補一個 B 字母於其後,
但在命令行上,真正的結果倒是隻會提換變量名稱爲 AB 的值出來…
若使用 ${ } 就沒問題了:
$ echo ${A}B
BB
${ }的功能遠不止於此,詳見下表。
$[] $(()) :
它們是同樣的,都是進行數學運算的。支持+ - * / %:分別爲 「加、減、乘、除、取模」。可是注意,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命令使用標準的數學比較符號來表示字符串的比較,而用文本符號來表示數值的比較。不少人會記反了。使用反了,shell可能得不到正確的結果。
3.大於符號或小於符號必需要轉義,不然會被理解成重定向。
(( ))及[[ ]] :
它們分別是[ ]的針對數學比較表達式和字符串表達式的增強版。
其中(( )),不須要再將表達式裏面的大小於符號轉義,除了可使用標準的數學運算符外,還增長了如下符號:
具體還能夠看Linux 命令行與shell腳本編程大全