该技能是一份面向 Bash 字符串操作的综合指南,主题为参数扩展、模式匹配、正则表达式与内置文本转换,并标注年份为 2025。其核心目标是掌握这些技术,从而在简单操作中避免启动 sed、awk、cut 等外部进程。
用途 资料将其定位为在使用 Bash 进行字符串与文本处理时参考的指南,覆盖参数扩展、模式匹配、正则表达式和内置转换等方向。文档最后总结为:掌握 Bash 字符串操作,以便在不依赖外部命令的情况下编写高效脚本。
主要能力 资料展示的能力包括:
- 参数扩展基础:字符串长度(如 ${#str}、数组元素长度、数组元素个数)、子串提取(${var:offset}、${var:offset:length}、负偏移、取末尾 N 个字符、取两位置之间的子串)、默认值(${var:-default}、${var:=default}、${var:+alternate}、${var:?error},以及不带冒号的变体)、间接扩展(${!var}、按前缀列出变量名、配合 nameref 的间接数组引用)。
- 模式匹配:前缀移除(${var#pattern}、${var##pattern})与后缀移除(${var%pattern}、${var%%pattern}),并给出获取扩展名、去除前导零、取目录名、去除扩展名、修改扩展名等示例。
- 模式替换:${var/pattern/replacement} 替换首个匹配、${var//pattern/replacement} 替换全部、${var/#pattern/replacement} 起始匹配替换、${var/%pattern/replacement} 结尾匹配替换,以及删除模式;示例用于文件名清理和路径规范化。
- 大小写转换:${str,}、${str,,}、${str^}、${str^^}、${str~~}(Bash 4.4+),以及仅针对匹配模式的大小写转换,并给出 title case 实现示例。
- 正则表达式:使用 =~ 进行匹配,捕获组通过 BASH_REMATCH 获取;资料给出邮箱、IP、URL 解析、语义化版本解析等实用正则示例。
- 字符串拆分与拼接:用 IFS 与 read 拆分、处理多字符分隔符、mapfile 按行读取,以及用 IFS 或 printf 实现数组拼接。
- 扩展通配(extglob):启用 shopt -s extglob 后使用 ?()、*()、+()、@()、!() 等模式,并给出匹配图片、排除备份文件、清理临时文件、匹配版本字符串等示例。
- Bash 5.3+ 字符串特性:包括 in-shell substitution、REPLY 语法构建字符串、高效字符串累加。
- 性能建议:避免为简单操作启动子 shell,示例对比了 basename、dirname、tr、wc 与纯 Bash 写法的差异,并建议将批量字符串操作集中在单个函数中完成。
此外,资料提到用 Bash 参数扩展、循环、数组和内建命令替代 sed、awk、cut、tr、basename 常见模式的具体示例位于参考文件 references/text-processing-without-external-commands.md 中,建议在优化热循环或避免进程创建开销时加载该参考。
使用方式 资料以 Bash 脚本示例呈现各项技术,脚本开头普遍带有 #!/usr/bin/env bash 与 set -euo pipefail,并包含若干可直接复用的函数(如 last_n、between、strip_leading_zeros、change_extension、sanitize_filename、normalize_path、title_case、is_valid_email、is_valid_ip、parse_url、parse_semver、join_by 等)。针对 Windows 文件路径,资料给出强制性要求:在 Windows 上使用 Edit 或 Write 工具时,文件路径必须使用反斜杠(\),而非正斜杠(/)。
适用场景 根据资料内容,该技能适用于需要对字符串进行判断、截取、替换、大小写转换、正则校验与解析、拆分拼接,以及进行扩展通配匹配等操作的 Bash 脚本编写场景;同时适用于希望减少外部进程调用、优化脚本性能的情形。
限制 资料中未提供价格、平台支持范围、具体安装命令以外的部署要求,也未说明该技能的可运行环境限制(除 Bash 版本相关特性外)。部分内容(如 Bash 5.3+ 特性、nameref、extglob)依赖较新的 Bash 版本,使用前需确认版本。资料中的参考文件需要在需要替代外部命令的示例时另行加载,其具体内容未在本页给出。