Linux expr命令详解

expr 是 Linux/Unix 系统中一个经典的外部命令,专门用于在命令行或 Shell 脚本中进行整数运算字符串处理

📝 基础语法与关键注意事项

  • 语法 : expr 表达式
  • 空格 : 操作符和操作数之间必须用空格分隔。
  • 转义 : 操作符 *, (, ), <, > 在 Shell 中有特殊含义,必须用 \ 转义(如 *, , , <, >)。
  • 引号 : 包含空格或特殊字符的字符串建议用双引号括起来。
  • 整数限定 : expr 仅支持整数运算,不处理浮点数。
  • 复杂表达式 : 当表达式包含多个操作符时,需要用反引号 <code></code> 或 $() 将表达式括起来,以将其整体传递给 expr。

bash

复制代码
#反引号(旧式)
复制代码
result=`expr 5 + 3`
复制代码
#美元符号加括号(推荐)
复制代码
result=$(expr 5 + 3)

⚙️ 核心功能与操作符

下表列出了 expr 支持的各类操作符,按运算优先级从低到高排列。

操作符/函数 说明 核心 示例
ARG1 ARG2 逻辑或 如果ARG1既不为空也不为0,则返回ARG1,否则返回ARG2
ARG1 & ARG2 逻辑与 如果ARG1和ARG2都不为空且不为0,则返回ARG1,否则返回0 expr 3 & 5 返回 3 expr 0 & 5 返回 0
ARG1 < ARG2 小于 整数或字符串比较,真返回1,假返回0 expr 3 < 5 返回 1
ARG1 <= ARG2 小于等于 expr 5 <= 5 返回 1
ARG1 = ARG2 等于 expr 5 = 6 返回 0
ARG1 != ARG2 不等于 expr 5 != 5 返回 0
ARG1 >= ARG2 大于等于 expr 5 >= 3 返回 1
ARG1 > ARG2 大于 expr 5 > 5 返回 0
ARG1 + ARG2 加法 整数运算 expr 5 + 3 返回 8
ARG1 - ARG2 减法 expr 10 - 4 返回 6
ARG1 * ARG2 乘法 注意乘法必须转义 expr 5 * 3 返回 15
ARG1 / ARG2 除法 expr 15 / 3 返回 5
ARG1 % ARG2 取余 expr 17 % 5 返回 2
length STRING 计算长度 expr length "hello" 返回 5
substr STRING POS LEN 提取子串 POS从1开始计数 expr substr "hello" 2 3 返回 ell
index STRING CHARS 查找字符位置 返回CHARS中任一字符在STRING中的第一个位置 expr index "hello" "lo" 返回 4(匹配到了l)
STRING : REGEXP 正则匹配 从STRING开头锚定匹配REGEXP并输出匹配部分 见下文详情
match STRING REGEXP 同上 STRING : REGEXP的替代写法 同上

📋 常见用法示例与技巧

1. 算术运算

bash

复制代码
#加减乘除取余
复制代码
expr 5 + 3   #输出8
复制代码
expr 5 \* 3  #输出15,乘号必须转义
复制代码
expr 10 / 3  #输出3(只取整数部分)
复制代码
复制代码
#多级运算,必须对括号转义
复制代码
expr \( 10 + 5 \) \* 3  #输出45
复制代码
复制代码
#与变量结合
复制代码
a=10
复制代码
a=$(expr $a + 5)
复制代码
echo $a  #输出15
2. 字符串操作

bash

复制代码
str="Hello World"
复制代码
复制代码
#获取字符串长度
复制代码
expr length "$str"           #输出11
复制代码
复制代码
#提取子串(位置从1开始)
复制代码
expr substr "$str" 2 4       #输出"ello"
复制代码
复制代码
#查找子串位置
复制代码
expr index "$str" "lo"       #输出4(第一个匹配的字符是'l')
复制代码
expr index "$str" "xyz"      #输出0(未找到)
相关推荐
AlfredZhao8 小时前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
戴为沐1 天前
Linux内存扩容指南
linux
zylyehuo2 天前
Linux 彻底且安全地删除文件
linux
用户805533698032 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297912 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
乘云数字DATABUFF2 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
Web3探索者4 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
zylyehuo4 天前
Linux系统中网线与USB网络共享冲突
linux
荣--4 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森4 天前
动手实战学 Docker — 从零到集群编排完全指南
运维