expr - 计算作为表达式的参数
/usr/bin/expr argument...
/usr/xpg4/bin/expr argument...
/usr/xpg6/bin/expr argument...
expr 实用程序将计算该表达式,并将结果写入标准输出。写入字符 0 表示值为零,不写入任何内容表示字符串为空。
expr 实用程序将计算该表达式,并将结果写入标准输出,其后跟有换行符。如果 expr 处理未生成任何结果,则将换行符写入标准输出。
argument 操作数作为表达式进行计算。表达式的各项之间必须以空格分隔。shell 的特殊字符必须进行转义(请参见 sh(1))。包含空格或其他特殊字符的字符串必须括在引号中。表达式的长度限制为 LINE_MAX(2048 个字符)。
下面列出了运算符和关键字。列表按照优先级递增顺序进行排列,优先级相同的操作符将归为一组,置于 { } 符号中。所有运算符从左向右执行运算。
如果既不是 NULL 也不是 0,则返回第一个 expr 的计算结果;否则,如果不是 NULL,则返回第二个 expr 的计算结果;否则,返回0。
如果 expr 既不是 NULL 也不是 0,则返回第一个 expr,否则返回 0。
如果所有参数均为整数,则返回整数比较的结果,否则使用语言环境特有的合并序列返回字符串比较的结果。如果指定的关系为 TRUE,则每个比较的结果为 1;如果指定的关系为 FALSE,则每个比较的结果为0。
整数值参数的加或减。
整数值参数的乘、除或余数。
匹配运算符 :(冒号)将第一个参数与第二个参数进行比较,除非所有模式均固定在字符串的开头,否则必须按照国际化基本正则表达式 (basic regular expression, BRE) 进行匹配。也就是说,只有从字符串第一个字符开始的序列才可按照正则表达式进行匹配。请参见 regex(7) 和“附注”部分。通常,/usr/bin/expr 匹配运算符将返回匹配的字节数,/usr/xpg4/bin/expr 匹配运算符将返回匹配的字符数(匹配失败返回 0)。如果第二个参数至少包含一个 BRE 子表达式 [\(...\)],则匹配运算符将返回与 \1 相对应的字符串。
仅由一元减号(可选)后跟数字组成的参数。
无法识别为 integer 参数或表达式运算符符号之一的字符串参数。
The following four operators: index, length, match, and substr, are all at the same precedence:
报告 string 中的第一个字节(从 1 开始计数),其中 character-list 中的字节与 string 中的字节匹配。如果字符串中未出现 character-list 中的任何字节,则返回 0。
返回 string 的长度(即字节数)。终止空字符不包含在该计数中。
与 expr : expr 匹配运算符含义相同。
从开始于 integer-1 位置且长度为 integer-2 字节的字符串(从 1 开始计数)中提取字节序列。If integer-1 has a value greater than the number of bytes in string, expr returns a null string.如果尝试提取的字节数大于字符串中的字节数,则 expr 将返回字符串中其余的所有字节。如果 integer-1 或 integer-2 为负值,则会产生意外的结果。
将 shell 变量 a 加 1:
example$ a=`expr $a + 1`示例 2 返回路径名称段
以下示例模拟了 basename(1),返回路径名 $a 的最后一段。For $a equal to either /usr/abc/file or just file, the example returns file.(请注意 / 单独作为参数的情况:expr 将其视为除法运算符。See NOTES below.)
example$ expr $a : '.*/\(.*\)' \| $a示例 3 使用 // 字符简化表达式
此处为上一个示例的更佳版本。添加 // 字符将消除有关除法运算符的歧义并简化整个表达式。
example$ expr //$a : '.*/\(.*\)'
example$ expr "$VAR" : '.*'
example$ expr "$VAR" : '.*'
See environ(7) for descriptions of the following environment variables that affect the execution of expr: LANG, LC_ALL, LC_COLLATE, LC_CTYPE, LC_MESSAGES, and NLSPATH.
作为表达式计算的副作用,expr 将返回以下退出值:
如果表达式既不是 NULL 也不是 0。
如果表达式为 NULL 或 0。
For invalid expressions.
出现错误。
有关下列属性的说明,请参见 attributes(7):
|
The match, substr, length, and index operators are Uncommitted.其他内容为 "Committed"(已确定)。
basename(1), echo(1), ed(1), sh(1), intro(3), attributes(7), environ(7), regex(7), standards(7)
运算符和操作数错误。
尝试对此字符串执行算术计算。
以下三个运算符未启用 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(7) 手册中对国际化正则表达式进行了说明。
Solaris 的早期发行版中具有 /usr/ucb/expr 命令,该命令的运算符优先顺序不同于此处所述的 expr 命令。另外,/usr/gnu/bin/expr 命令具有自己专属的运算符优先顺序。