手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

expr(1)

名称

expr - 计算作为表达式的参数

用法概要

/usr/bin/expr argument...
/usr/xpg4/bin/expr argument...
/usr/xpg6/bin/expr argument...

描述

/usr/bin/expr, /usr/xpg4/bin/expr

expr 实用程序将计算该表达式,并将结果写入标准输出。写入字符 0 表示值为零,不写入任何内容表示字符串为空。

/usr/xpg6/bin/expr

expr 实用程序将计算该表达式,并将结果写入标准输出,其后跟有换行符。如果 expr 处理未生成任何结果,则将换行符写入标准输出。

操作数

argument 操作数作为表达式进行计算。表达式的各项之间必须以空格分隔。shell 的特殊字符必须进行转义(请参见 sh(1))。包含空格或其他特殊字符的字符串必须括在引号中。表达式的长度限制为 LINE_MAX(2048 个字符)。

下面列出了运算符和关键字。列表按照优先级递增顺序进行排列,优先级相同的操作符将归为一组,置于 { } 符号中。所有运算符从左向右执行运算。

expr \| expr

如果既不是 NULL 也不是 0,则返回第一个 expr 的计算结果;否则,如果不是 NULL,则返回第二个 expr 的计算结果;否则,返回 0

expr \& expr

如果 expr 既不是 NULL 也不是 0,则返回第一个 expr,否则返回 0

expr{ =, \>, \>=, \<, \<=, !=} expr

如果所有参数均为整数,则返回整数比较的结果,否则使用语言环境特有的合并序列返回字符串比较的结果。如果指定的关系为 TRUE,则每个比较的结果为 1;如果指定的关系为 FALSE,则每个比较的结果为 0

expr { +, } expr

整数值参数的加或减。

expr { \*, /, %} expr

整数值参数的乘、除或余数。

expr : expr

匹配运算符 :(冒号)将第一个参数与第二个参数进行比较,除非所有模式均固定在字符串的开头,否则必须按照国际化基本正则表达式 (basic regular expression, BRE) 进行匹配。也就是说,只有从字符串第一个字符开始的序列才可按照正则表达式进行匹配。请参见 regex(5) 和“附注”部分。通常,/usr/bin/expr 匹配运算符将返回匹配的字节数,/usr/xpg4/bin/expr 匹配运算符将返回匹配的字符数(匹配失败返回 0)。如果第二个参数至少包含一个 BRE 子表达式 [\(...\)],则匹配运算符将返回与 \1 相对应的字符串。

integer

仅由一元减号(可选)后跟数字组成的参数。

string

无法识别为 integer 参数或表达式运算符符号之一的字符串参数。

以下四种运算符(index、length、match 和 substr)的优先级相同:

index string character-list

报告 string 中的第一个字节(从 1 开始计数),其中 character-list 中的字节与 string 中的字节匹配。如果字符串中未出现 character-list 中的任何字节,则返回 0

length string

返回 string 的长度(即字节数)。终止空字符不包含在该计数中。

match string regular-expression

expr : expr 匹配运算符含义相同。

substr string integer-1 integer-2

从开始于 integer-1 位置且长度为 integer-2 字节的字符串(从 1 开始计数)中提取字节序列。如果 integer-1 的值大于字符串中的字节数,则 expr 将返回一个空字符串。如果尝试提取的字节数大于字符串中的字节数,则 expr 将返回字符串中其余的所有字节。如果 integer-1integer-2 为负值,则会产生意外的结果。

示例

示例 1 将 shell 变量与整数相加

将 shell 变量 a 加 1:

example$ a=`expr  $a  +  1`
示例 2 返回路径名称段

以下示例模拟了 basename(1),返回路径名 $a 的最后一段。如果 $a 等于 /usr/abc/file 或仅为 file,示例将返回 file。(请注意 / 单独作为参数的情况:expr 将其视为除法运算符。请参见下面的“附注”部分。)

example$ expr $a : '.*/\(.*\)' \| $a
示例 3 使用 // 字符简化表达式

此处为上一个示例的更佳版本。添加 // 字符将消除有关除法运算符的歧义并简化整个表达式。

example$ expr //$a : '.*/\(.*\)'

/usr/bin/expr

示例 4 返回变量中的字节数
example$ expr "$VAR" : '.*'

/usr/xpg4/bin/expr

示例 5 返回变量中的字符数
example$ expr "$VAR" : '.*'

环境变量

有关影响 expr 执行的以下环境变量的描述,请参见 environ(5):LANG、LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES 和 NLSPATH。

退出状态

作为表达式计算的副作用,expr 将返回以下退出值:

0

如果表达式既不是 NULL 也不是 0

1

如果表达式为 NULL 或 0

2

对于无效表达式。

>2

出现错误。

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
system/core-os
CSI
Enabled(已启用)。请参见“附注”部分。
接口稳定性
请参见下文。
标准
请参见 standards(5)

match、substr、lengthindex 运算符的状态为 "Uncommitted"(未确定)。其他内容为 "Committed"(已确定)。

另请参见

basename(1)ed(1)sh(1)Intro(3)attributes(5)environ(5)regex(5)standards(5)

诊断

syntax error

运算符和操作数错误。

non-numeric argument

尝试对此字符串执行算术计算。

附注

以下三个运算符未启用 CSI。这些运算符在 /usr/xpg4/bin/expr/usr/xpg6/bin/expr 中也不可用:


index string character-list

length string

substr string integer-1 integer-2

参数经过 shell 处理之后,除非根据值,否则 expr 无法区别运算符和操作数。如果 $a=,则命令:

example$ expr $a = '='

类似如下:

example$ expr = = =

参数传递给 expr(它们均被视为 = 运算符)。以下表达式有效:

example$ expr X$a = X=

正则表达式

不同于以前的某些版本,expr 对所有系统提供的语言环境均使用国际化基本正则表达式。regex(5) 手册中对国际化正则表达式进行了说明。