linux截取shell字符串主要用${var:offset:length}语法和模式匹配,如${phone:0:3}取前3字符、${path##\*/}删左至最后/、${url%/*}删右至最后/,也可用expr、cut、awk等外部命令辅助。

Linux 中截取 Shell 字符串变量的子串,主要靠 ${var:offset:length} 语法和基于模式的掐头去尾操作,不依赖外部命令也能高效完成。
按位置截取(最常用)
使用 ${var:起始位置:长度},起始位置从 0 开始计数,长度可省略表示截到末尾:
-
${phone:0:3}→ 取前 3 个字符(如138) -
${phone:4}→ 从第 5 位开始取到结尾(如2345678) -
${phone: -3}→ 注意前面有空格,取最后 3 个字符(如678) -
${phone:4:-2}→ 从第 5 位起,截到倒数第 2 位前(不含末尾 2 个)
按分隔符掐头(删除左边)
用 # 和 ## 从左向右匹配并删掉前面部分,保留右边:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
${path#*/}→ 删除第一个/及其左边(etc/init.d/functions) -
${path##*/}→ 删除最后一个/及其左边(functions) - 注意:
#是最短匹配,##是最长匹配
按分隔符去尾(删除右边)
用 % 和 %% 从右向左匹配并删掉后面部分,保留左边:
-
${url%/*}→ 删除最后一个/及其右边(http://www.example.com) -
${url%%.*}→ 删除第一次出现的.及其右边(example,适用于域名提取) -
%是最短匹配,%%是最长匹配
其他实用方式
必要时也可用外部命令辅助,但不如内置语法轻量:
-
expr substr "$var" 1 5→ 起始位置从 1 开始,取 5 个字符 -
echo "$var" | cut -c 2-6→ 按字符位置截取(位置从 1 起) -
echo "$var" | awk '{print substr($0,3,4)}'→ awk 的substr函数,起始索引为 1










