Bash原生字符串处理高效安全:trim_string函数去首尾空格,${1,,}和${1^^}实现大小写转换,${#var}取长度、${var:2:5}截取、${var// /\_}替换,IFS配合read或数组分割替代cut。

直接用 Bash 自带的参数扩展和内置功能处理字符串,比调用 sed、awk、tr 快得多,也不怕特殊字符或换行符出错。
快速去首尾空格
不用 sed 's/^[[:space:]]*//; s/[[:space:]]*$//',Bash 两行就能搞定:
- 定义函数:
trim_string() { :"${1#"${1%%[![:space:]]*}"}"; :"${_%"${_##*[![:space:]]}"}"; printf '%s\n' "$_"; } - 调用:
result=$(trim_string " hello world ")→ 输出hello world - 原理是利用
${var#pattern}删前缀、${var%pattern}删后缀,配合空格匹配逻辑
大小写转换不依赖 tr
Bash 4.0+ 原生支持大小写展开,零开销:
- 转小写:
lower() { printf '%s\n' "${1,,}"; }→$(lower "HELLO")得hello - 转大写:
upper() { printf '%s\n' "${1^^}"; }→$(upper "world")得WORLD - 注意:仅对 ASCII 字母默认生效;含 locale 时可支持更多字符(需设置
LC_CTYPE)
截取、长度、替换全靠 ${}
这些操作都不启动子进程,安全又高效:
- 取长度:
${#var}—— 变量未定义时返回 0,不会报错 - 从第3位截5个字符:
${var:2:5}(索引从 0 开始) - 删第一个匹配前缀:
${var#prefix*};删最后一个:${var##prefix*} - 全局替换空格为下划线:
${var// /_};首处替换用单斜杠${var/ /_}
按分隔符切分字符串(替代 cut)
不用 cut -d',' -f2,纯 Bash 可以这样拆:
- 设
str="a,b,c",用IFS=',' read -r a b c <<<"$str"直接赋值给变量 - 或转成数组:
IFS=',' arr=($str),再取${arr[1]}得b - 注意:
read方式更健壮,能正确处理空字段;($str)依赖单词分割,遇连续分隔符会塌缩

















