expr
是一个在 Unix 或 Linux 环境下常用的命令行工具,用于执行表达式求值操作。它支持各种数值和字符串操作,包括算术运算、逻辑运算和字符串匹配等。下面是关于 expr
的详细说明和用法案例。
语法:
expr EXPRESSION
参数:
EXPRESSION
:要求值的表达式。
算术运算:
- 加法:
expr NUM1 + NUM2
- 减法:
expr NUM1 - NUM2
- 乘法:
expr NUM1 \* NUM2
(注意使用反斜杠转义乘号) - 除法:
expr NUM1 / NUM2
- 取模(取余数):
expr NUM1 % NUM2
逻辑运算:
- 等于:
expr NUM1 = NUM2
(相等时返回 1,否则返回 0) - 不等于:
expr NUM1 != NUM2
(不相等时返回 1,否则返回 0) - 大于:
expr NUM1 > NUM2
(NUM1 大于 NUM2 时返回 1,否则返回 0) - 小于:
expr NUM1 < NUM2
(NUM1 小于 NUM2 时返回 1,否则返回 0) - 大于等于:
expr NUM1 >= NUM2
(NUM1 大于等于 NUM2 时返回 1,否则返回 0) - 小于等于:
expr NUM1 <= NUM2
(NUM1 小于等于 NUM2 时返回 1,否则返回 0)
字符串操作:
- 字符串长度:
expr length STRING
(返回字符串的长度) - 字符串匹配:
expr STRING : REGEX
(如果字符串与正则表达式匹配时返回 1,否则返回 0) - 子字符串提取:
expr substr STRING START LENGTH
(从字符串的指定位置开始提取指定长度的子字符串)
案例:
-
计算两个整数的和:
$ expr 5 + 3 输出:8
-
比较两个整数是否相等:
$ expr 5 = 5 输出:1
-
提取字符串的子字符串:
$ expr substr "Hello World" 7 5 输出:"World"
-
计算字符串的长度:
$ expr length "Hello" 输出:5
-
执行逻辑运算:
$ expr 10 \> 5 输出:1
-
使用括号进行优先级控制:
$ expr \( 5 + 3 \) \* 2 输出:16
-
判断字符串是否包含指定子字符串:
$ expr "Hello World" : "Hello" 输出:5
如果匹配成功,输出的是匹配到的子字符串的长度;如果匹配失败,输出的是 0。
-
判断字符串是否以指定子字符串开头:
$ expr "Hello World" : "^Hello" 输出:5
如果匹配成功,输出的是匹配到的子字符串的长度;如果匹配失败,输出的是 0。
-
进行数值比较并输出结果:
$ expr 10 '>' 5 输出:1
注意在进行数值比较时,运算符需要使用引号括起来,以防止 shell 对运算符进行解释。
-
将表达式结果赋值给变量:
$ result=$(expr 5 + 3) $ echo $result 输出:8
使用
$()
将expr
的结果赋值给变量,并通过echo
命令输出。 -
计算两个整数的余数:
$ expr 10 % 3 输出:1
使用
%
运算符可以计算两个整数相除后的余数。 -
使用变量进行表达式求值:
$ num1=5 $ num2=3 $ expr $num1 + $num2 输出:8
可以使用变量存储数值,并在表达式中使用
$
加上变量名的方式进行求值。 -
处理负数:
$ expr 5 - -3 输出:8
在表达式中使用两个连续的减号可以处理负数,避免与减法运算符混淆。
-
结合使用多个运算符:
$ expr 5 \* \( 3 + 2 \) 输出:25
可以结合使用括号和运算符来进行复杂的表达式求值,控制运算的优先级。
-
字符串拼接:
$ expr "Hello" : "\(.*\)o" 输出:"Hell"
使用括号捕获部分字符串,并在正则表达式中使用反斜杠引用进行字符串拼接。
这些案例提供了更多关于 expr
命令的用法示例,包括求余数、使用变量、处理负数、结合多个运算符以及字符串拼接。根据具体需求,可以灵活运用这些功能来完成各种表达式求值操作。