/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(5) 和“附注”部分。通常,/usr/bin/expr 匹配运算符将返回匹配的字节数,/usr/xpg4/bin/expr 匹配运算符将返回匹配的字符数(匹配失败返回 0)。如果第二个参数至少包含一个 BRE 子表达式 [\(...\)],则匹配运算符将返回与 \1 相对应的字符串。
仅由一元减号(可选)后跟数字组成的参数。
无法识别为 integer 参数或表达式运算符符号之一的字符串参数。
以下四种运算符(index、length、match 和 substr)的优先级相同:
报告 string 中的第一个字节(从 1 开始计数),其中 character-list 中的字节与 string 中的字节匹配。如果字符串中未出现 character-list 中的任何字节,则返回 0。
返回 string 的长度(即字节数)。终止空字符不包含在该计数中。
与 expr : expr 匹配运算符含义相同。
从开始于 integer-1 位置且长度为 integer-2 字节的字符串(从 1 开始计数)中提取字节序列。如果 integer-1 的值大于字符串中的字节数,则 expr 将返回一个空字符串。如果尝试提取的字节数大于字符串中的字节数,则 expr 将返回字符串中其余的所有字节。如果 integer-1 或 integer-2 为负值,则会产生意外的结果。
将 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 : '.*/\(.*\)'
example$ expr "$VAR" : '.*'
example$ expr "$VAR" : '.*'
有关影响 expr 执行的以下环境变量的描述,请参见 environ(5):LANG、LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES 和 NLSPATH。
作为表达式计算的副作用,expr 将返回以下退出值:
如果表达式既不是 NULL 也不是 0。
如果表达式为 NULL 或 0。
对于无效表达式。
出现错误。
有关下列属性的说明,请参见 attributes(5):
|
match、substr、length 和 index 运算符的状态为 "Uncommitted"(未确定)。其他内容为 "Committed"(已确定)。
basename(1)、ed(1)、sh(1)、Intro(3)、attributes(5)、environ(5)、regex(5)、standards(5)
运算符和操作数错误。
尝试对此字符串执行算术计算。
以下三个运算符未启用 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) 手册中对国际化正则表达式进行了说明。