expr 命令
用途
求表達式變量的值。
語法
expr Expression
描述
expr 命令讀入 Expression 參數,計算它的值,然後將結果寫入到標準輸出。
您必須對 Expression 參數應用以下規則:
整數前面可以放一個一元連字符。在內部,整數被當作 32 位,雙互補數。
注: expr 命令返回一個 0 來指示一個零值,而不是空字符串。
以下項描述了 Expression 參數的運算符和關鍵字。需要轉義的字符由一個 / (反斜槓) 放在前面。這些項按照優先權遞增的順序列出,具有相等的優先權的運算符分組在 {} (大括號) 中:
Expression1 /| Expression2 | 返回 Expression1 如果它不是空值或者 0 值的話,否則返回 Expression2 。 |
Expression1 /& Expression2 | 返回 Expression1 如果兩個表達式都不是空值或者 0 值,否則返回一個 0 值。 |
Expression1 { =, />, />=, /<, /<=, != } Expression2 | 如果兩個表達式都是整數,返回整數比較的結果;否則它返回的是字符串比較的結果。 |
Expression1 {+, - } Expression2 | 整數值變量的加或者減。 |
Expression1 { /*, /, % } Expression2 | 整數值變量的乘、除或者提供除法的餘數。 |
Expression1 : Expression2 | 將 Expression1 的運算得到的字符串與 Expression2 的運算結果的正則表達式模式進行比較。正則表達式語法與 ed 命令相同,除了所有的模式固定到字符串的開始之外(也就是說,只有以字符串的第一個字符開始的序列才被正則表達式匹配)。因此 ^ (插入符號) 在這種情況下就不是特殊字符。
一般地,匹配運算符返回匹配的字符個數(失敗的時候返回 0)。如果模式包含了一個子表達式,也就是: /( Expression /) 則會返回包含了實際匹配的字符的字符串。 整理順序可以定義在字符範圍內使用的等價類。有關整理順序和等價類的更多信息,請參閱《AIX V6.1 本地語言支持指南與參考大全》 中的『瞭解語言環境的環境變量』 。 |
注: 以下字符串變量會超過標準,其行爲可能在不同的操作系統中會有不同。這些字符串變量是“不”可移植的。
退出狀態
此命令返回以下退出值:
0 | Expression 參數運算值既不爲空也不爲 0。 |
1 | Expression 參數的計算值或者爲空或者爲 0。 |
2 | Expression 參數無效。 |
>2 | 發生錯誤。 |
注: 在 shell 處理完參數後,expr 命令除了利用數值外不能區分運算符和操作數。因此,如果 $a的值是 j 的話,命令:
expr $a = j
就像:
expr j = j
在 shell 將所有的參數都傳給 expr 命令之後。以下情況也爲 true:
expr X$a = Xj
示例
### 字串長度
shell>> expr length "this is a test"
14
### 數字商數
shell>> expr 14 % 9
5
### 從位置處抓取字串
shell>> expr substr "this
is a test" 3 5
is is
### 數字串 only the first character
shell>> expr index "testforthegame" e
2
### 字串真實重現
shell>> expr quote thisisatestformela
thisisatestformela
~~~~~~~~~~~~~~~~~
expr命令是一個手工命令行計數器,用於在UNIX/LINUX下求表達式變量的值,一般用於整數值,也可用於字符串。
–格式爲:
expr Expression(命令讀入Expression 參數,計算它的值,然後將結果寫入到標準輸出)
–參數應用規則:
用空格隔開每個項;
用 \ (反斜槓) 放在 shell 特定的字符前面;
對包含空格和其他特殊字符的字符串要用引號括起來
–expr用法實例講解:
(1)、計算字串長度
> expr length “this is a test”
14
(2)、抓取字串
> expr substr “this is a test” 3 5
is is
(3)、抓取第一個字符數字串出現的位置
> expr index “sarasara” a
2
(4)、字串真實重現
> expr quote sara
sara
(5)、整數運算
> expr 14 % 9
5
> expr 10 + 10
20
> expr 1000 + 900
1900
> expr 30 / 3 / 2
5
> expr 30 \* 3 (使用乘號時,必須用反斜線屏蔽其特定含義。因爲shell可能會誤解顯示星號的意義)
90
> expr 30 * 3
expr: Syntax error
(6)、增量計數
說明:expr在循環中用於增量計算。先將變量初始化爲0,然後循環值加1,反引號的用法爲命令替代。
> LOOP=0
> LOOP=`expr $LOOP + 1`
(7)、數值測試
說明:用expr測試一個數。如果試圖計算非整數,則會返回錯誤。
> rr=3.4
> expr $rr + 1
expr: non-numeric argument
> rr=5
> expr $rr + 1
6
(8)、模式匹配
說明:expr也有模式匹配功能。可以使用expr通過指定冒號選項計算字符串中字符數。.*意即任何字符重複0次或多次。
> VALUE=account.doc
> expr $VALUE : ‘.*’
8
在expr中可以使用字符串匹配操作,這裏使用模式抽取.doc文件附屬名。
$expr $VALUE : ‘\(.*\).doc’
accounts