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