以下是 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 的内容替换为 string | echo ${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 |
补充说明
- 通配符模式:上述
pattern主要使用通配符(*,?,[...]),不是正则表达式。 - 大小写转换:Bash 4.0+ 支持
${var^}/${var^^}/${var,}/${var,,}。 - 反转大小写:Bash 5.1+ 才支持
${var~~}。 - 外部工具:更复杂的操作(如正则替换、反向引用)建议使用
sed,awk,tr或${BASH_REMATCH}。
发表回复
要发表评论,您必须先登录。