Bash 中常用的字符串(变量)操作

处理变量值很方便

以下是 Bash 中常用的字符串操作汇总,以表格形式呈现,主要涵盖 参数扩展(Parameter Expansion) 语法。

操作分类操作语法描述示例 (str="Hello, World!")
获取长度${#var}返回字符串的字符长度echo ${#str} → 13
截取子串${var:offset}从 offset 开始截取到末尾(索引从 0 开始)echo ${str:7} → World!
截取子串${var:offset:length}从 offset 开始截取指定长度的字符echo ${str:0:5} → Hello
删除前缀${var#pattern}删除 最短 匹配的前缀(通配符匹配)echo ${str#*, } → World!
删除前缀${var##pattern}删除 最长 匹配的前缀(贪婪匹配)path="/a/b/c"; echo ${path##*/} → c
删除后缀${var%pattern}删除 最短 匹配的后缀echo ${str%,*} → Hello
删除后缀${var%%pattern}删除 最长 匹配的后缀file="a.tar.gz"; echo ${file%%.*} → a
替换(首次)${var/pattern/string}将第一个匹配 pattern 的内容替换为 stringecho ${str/o/O} → HellO, World!
替换(全部)${var//pattern/string}将 所有 匹配的内容替换echo ${str//o/O} → HellO, WOrld!
替换前缀${var/#pattern/string}仅当字符串 开头 匹配时才替换echo ${str/#Hello/Hi} → Hi, World!
替换后缀${var/%pattern/string}仅当字符串 结尾 匹配时才替换echo ${str/%World!/Earth!} → Hello, Earth!
大小写转换${var^}将 首字母 转为大写echo ${str^} → Hello, world!
大小写转换${var^^}将 所有字母 转为大写echo ${str^^} → HELLO, WORLD!
大小写转换${var,}将 首字母 转为小写str2="HELLO"; echo ${str2,} → hELLO
大小写转换${var,,}将 所有字母 转为小写echo ${str,,} → hello, world!
反转大小写${var~~}反转大小写(Bash 5.1+)echo ${str~~} → hELLO, wORLD!
设置默认值${var:-default}若变量未定义或为空,返回默认值(不改变原变量)unset foo; echo ${foo:-"none"} → none
赋值默认值${var:=default}若变量未定义或为空,则将默认值赋给变量并返回unset foo; echo ${foo:="none"} → none (且 $foo 变为 none)
变量非空报错${var:?error_msg}若变量未定义或为空,打印错误信息并退出脚本unset foo; echo ${foo:?"Not set"} → bash: foo: Not set
变量存在替代${var:+alternate}若变量已定义且非空,则返回 alternate 值echo ${str:+"Exists"} → Exists
获取子串位置expr index "$str" chars查找字符集中任一字符首次出现的位置(1-based)expr index "$str" "o" → 5
字符串匹配索引expr match "$str" pattern返回正则匹配到的长度(或子串),非纯内置expr match "$str" "Hello" → 5

补充说明

  1. 通配符模式:上述 pattern 主要使用通配符(*, ?, [...]),不是正则表达式。
  2. 大小写转换:Bash 4.0+ 支持 ${var^} / ${var^^} / ${var,} / ${var,,}。
  3. 反转大小写:Bash 5.1+ 才支持 ${var~~}。
  4. 外部工具:更复杂的操作(如正则替换、反向引用)建议使用 sed, awk, tr 或 ${BASH_REMATCH}。

发表回复