expr
是 Unix/Linux 系统中的一个命令行工具,用于执行表达式计算并输出结果。它可以处理算术运算、字符串操作和逻辑比较等任务。尽管现代脚本语言(如 Python 或 Bash 内置功能)可以更方便地完成这些任务,但了解 expr
命令仍然是非常有帮助的,尤其是在需要兼容旧系统或简单脚本时。
expr
的基本语法如下:
expr expression
其中 expression
是要计算的表达式。表达式可以是数字、字符串或逻辑运算符的组合。
注意:expr
命令对空格非常敏感,每个操作符和操作数之间必须用空格分隔。
expr
支持基本的算术运算,包括加法、减法、乘法、除法和取模。
expr 5 + 3
输出:
8
expr 5 - 3
输出:
2
乘法符号 *
在 Shell 中是一个通配符,因此需要用反斜杠 \
转义。
expr 5 \* 3
输出:
15
expr 6 / 3
输出:
2
expr 5 % 3
输出:
2
注意事项:expr
默认只支持整数运算,无法直接处理浮点数。
expr
还可以用于字符串的长度计算和匹配操作。
expr length "Hello World"
输出:
11
使用正则表达式匹配字符串中的子串位置。
expr match "HelloWorld" 'Hello.*'
输出:
5
解释:返回匹配部分的长度(这里是 "Hello" 的长度为 5)。
expr
支持逻辑运算符,用于比较两个值。
expr 5 = 5
输出:
1
如果相等,返回 1;否则返回 0。
expr 5 != 3
输出:
1
expr 5 \> 3 # 大于
expr 5 \< 3 # 小于
expr 5 >= 3 # 大于等于
expr 5 <= 3 # 小于等于
#!/bin/bash
read -p "请输入第一个数字: " num1
read -p "请输入第二个数字: " num2
sum=$(expr $num1 + $num2)
echo "两数之和为: $sum"
运行结果:
请输入第一个数字: 10
请输入第二个数字: 20
两数之和为: 30
#!/bin/bash
str="HelloWorld"
prefix="Hello"
if [ $(expr match "$str" "$prefix.*") -gt 0 ]; then
echo "字符串以 '$prefix' 开头"
else
echo "字符串不以 '$prefix' 开头"
fi
运行结果:
字符串以 'Hello' 开头
替代工具:在现代 Shell 脚本中,通常使用 (( ))
或 $(( ))
来进行算术运算,或者使用 [[ ]]
和正则表达式进行字符串匹配。这些方法更加简洁且功能强大。
sum=$((5 + 3))
echo $sum # 输出 8
限制:expr
只能处理简单的表达式,对于复杂的数学运算或字符串操作,推荐使用专门的工具(如 bc
或 awk
)。
错误处理:如果表达式无效或输入错误,expr
会返回错误信息。例如:
expr 5 +
输出:
expr: syntax error