By francis_hao Oct 2,2017
本文摘錄自bash的man手冊。
算數運算相關的形式
形式 |
含義 |
((expression)) |
expression按照下面描述的算術運算規則進行運算。如果最終結果是非0的,返回0。其他結果返回1。該形式和let "expression"等同 |
let arg [arg ...] |
每個arg都是一個算數表達式,如果最后一個arg結果是非0的,返回0,其他結果返回1。 |
算數擴展
算數擴展允許計算算數表達式,並替換該結果。算數擴展的形式是
$((expression))
expression被視作在雙引號""中,但是在圓括號中雙引號不被特殊處理。expression中的所有項都會被參數擴展和命令替換。如果expression無效,bash會打印一條指示失敗的信息。另外,算數擴展可以嵌套。
例如:
其中,算數擴展會直接替換結果,因此$((1+1))就結果來說,就是2。
算術運算
在特定的環境下(例如let和算數擴展中),shell允許數值的算數運算,運算在固定長度的整數中運算,並且不檢查是否溢出。除以0會被捕獲並標記為錯誤(打印一條錯誤信息)。運算符和他們的優先級、結合律和C語言中的一致,括號可以改變優先級。下表按照優先級由高到低排序。
運算符 |
說明 |
id++ d-- |
自增,自減(先取值后運算) |
++id --id |
自增,自減(先運算后取值) |
|
一元的負號和正號 |
! ~ |
邏輯非和按位非 |
** |
乘方 |
* / % |
|
+ - |
|
<< >> |
|
<= >= < > |
|
== != |
|
& |
|
^ |
按位異或 |
| |
|
&& |
|
|| |
|
expr?expr:expr |
|
= *= /= %= += -= <<= >>= &= ^= |= |
|
expr1 , expr2 |
逗號 |
在表達式中,shell變量可以不使用$來引用,一個null或未設置的變量被當做0來處理。變量可以通過declare的-i選項來設置其整數屬性,但是,在算數表達式中的變量不是必須擁有整數屬性,因為表達式中默認當作整數處理。
以0開頭的常數被解釋成八進制數,以0x或0X開頭標記為十六進制,其他的進制可以通過[base#]n來表示,其中,可選的base是一個十進制數,在0-64之間,表示進制。n是指定的進制的數,如果base#被省略,則使用十進制。大於9的數字會使用小寫字母、大寫字母、@和_按順序表示。最大為64進制,就是最大要能表示到63,那么0-9代表0-9,a-z表示10-35,A-Z表示36-61,@表示62,_表示63。
本文由 劉英皓 創作,采用 知識共享署名-非商業性使用-相同方式共享3.0中國大陸許可協議 進行許可。歡迎轉載,請注明出處:
轉載自:http://www.cnblogs.com/yinghao1991/p/7622777.html
參考
【1】腳本之家 http://www.jb51.net/article/57943.htm Shell腳本中不同進制數據轉換
【2】stackoverflow.com https://stackoverflow.com/questions/27738943/what-is-unary-plus-minus-in-r
【3】man sh