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(未找到)
相关推荐
姜鱼问生4 小时前
Nginx 缓存命中率监控:从 X-Cache-Status 到实时统计
运维·nginx·缓存
Apipi*4 小时前
30天速通Linux 第六章信号及信号处理
linux·运维·信号处理
天启HTTP5 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
运维行者_6 小时前
网络性能监控怎么做?从自动发现到根因分析的4个环节
运维·服务器·网络·人工智能·支持向量机
此时不提桶,更待何时6 小时前
06-14-A-Kafka集群运维与迁移实战详解
运维·kafka
hz567898 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
广州浮点FLOATLIC8 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
优橙教育8 小时前
零基础学AI应用开发要多久?3个月能到什么水平
服务器·开发语言·网络·php
IT研究所8 小时前
AI-ITR平台如何减少客户问题反复升级?
大数据·运维·人工智能·低代码·自然语言处理·安全架构·企微
BLUcoding8 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom