expr

计算表达式


语法格式

expr expression
expr [--help] [--version]

命令简介

expr命令用于计算指定的表达式,把计算结果写到标准输出。其中,expression可以是下列逻辑运算表达式、字符串比较表达式、整数算术运算表达式或模式匹配表达式等:

arg1 \| arg2  如果arg1既非NULL,也非0,返回arg1,否则返回arg2

arg1 \& arg2  如果arg1arg2均非NULL或0,返回arg1,否则返回0。

arg1 \< arg2  如果前者小于后者,返回1,否则返回0。

arg1 \<= arg2  如果前者小于或等于后者,返回1,否则返回0。

arg1 = arg2  如果两者相等,返回1,否则返回0。

arg1 == arg2  同上。

arg1 != arg2  如果两者不等,返回1,否则返回0。

arg1 \>= arg2  如果前者大于或等于后者,返回1,否则返回0。

arg1 \> arg2  如果前者大于后者,返回1,否则返回0。

arg1 + arg2  返回两者算术运算之和。

arg1 - arg2  返回两者算术运算之差。

arg1 \* arg2  返回两者的算术乘积。

arg1 / arg2  返回两者整除运算的结果(运算结果仅保留整数部分)。

arg1 % arg2  返回两者模运算的结果。

str : regexp  从给定字符串str的第一个字符开始执行正则表达式regexp的模式匹配,如果匹配成功,且正则表达式含有“\(”与“\)”子表达式,则返回匹配子表达式的字符串,否则返回匹配表达式的字符个数。如果匹配失败,且正则表达式含有“\(”与“\)”子表达式,则返回空串,否则返回0。注意,这里只能返回匹配第一个子表达式“\( ... \)”的字符串。仅当使用了表达式组合运算符时,后续子表达式才有意义。此外,“\( ... \)”子表达式前后必须加双引号。

match str regexp  意义同上。

substr str pos length  从指定的字符位置pos开始,从字符串str中抽取指定长度length的子串。字符串的起始字符位置为1。

index str chars  从给定的字符串中返回发现给定字符的位置,否则返回0。

length str  返回给定字符串的长度。

+ token  把给定的记号当作字符串处理,即使是一个关键字(如match)或运算符(如除号“/”)。

\( expression \)  返回表达式的计算结果。

在上述表达式中,操作数或者是一个整数,或者是一个字符串。整数前面可以有负号“-”,表示负数(但不能用作表达式中的第一个操作数)。如果arg1arg2都是整数,采用算术比较运算,否则按字符编码顺序进行比较。

如果表达式的计算结果既非空串,也非0,expr命令返回结束状态0。如果表达式的计算结果是空串或0,expr命令的结束状态是1。

expr命令仅支持基本的正则表达式,给定的正则表达式蕴含着一个“^”前缀,表示仅考虑从字符串第一个字符开始的子串是否匹配。如果存在,正则表达式中的运算符“*”、“\+”、“\?”和“\|”分别表示匹配前一项0次或多次、一次或多次、0次或一次,以及交替匹配等。

应用实例

1. 利用expr命令测试字符串表达式。

$ TIMEZONE=CST
$ expr "$TIMEZONE" = "CST"
1
$ echo $?
0
$ expr "$TIMEZONE" = "GMT"
0
$ echo $?
1
$

2. 利用expr命令检索字符串。

$ expr apple : "\(ap\+le\)"
apple
$

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z