pure-bash-bible:不用外部工具,纯 bash 就能干这么多事
文章目录pure-bash-bible不用外部工具纯 bash 就能干这么多事项目解决什么问题能解决哪些问题举几个实用的例子项目结构实际效果怎么样适合什么人pure-bash-bible不用外部工具纯 bash 就能干这么多事写 bash 脚本的时候你有没有想过每次调用sed、awk、grep这些外部命令其实都要启动一个新进程进程多了脚本就慢了。这个叫 pure-bash-bible 的项目就是专门收集那些只用 bash 内置功能就能完成的任务。Star 数 4.1 万在 GitHub 上挺火的。项目解决什么问题bash 脚本里很多操作我们习惯调用外部工具。比如去掉字符串首尾空格用sed字符串分割用awk或cut文件读取用cat或head这些工具本身没问题但每次调用都要 fork 一个新进程。如果脚本里调用几百次性能损耗就明显了。pure-bash-bible 的思路很简单这些操作bash 自己就能做而且更快。能解决哪些问题这个项目把内容分成了几个大类字符串处理去空格、大小写转换、正则匹配、字符串分割全用 bash 内置语法。比如去首尾空格不用sed用参数展开就行:${1#${1%%[![:space:]]*}}:${_%${_##*[![:space:]]}}数组操作反转、去重、随机取元素都是纯 bash 实现。文件处理读文件、取前 N 行、统计行数用read和重定向就能搞定。条件判断文件是否存在、变量是否为空bash 内置的[[ ]]比调用外部命令快得多。算术运算加减乘除、位运算bash 自带(( ))语法不用expr。举几个实用的例子字符串分割不用awk用IFS和readsplit(){IFS$\nread-d-raarr${1//$2/$\n}printf%s\n${arr[]}}调用split apple,orange,pear ,就能得到三个元素。生成 UUID纯 bash 实现不用装额外工具uuid(){cat/proc/sys/kernel/random/uuid2/dev/null||{localB$(od-x/dev/urandom|head-1|awk{OFS-; print $2$3,$4,$5,$6,$7$8$9})echo$B}}进度条用printf和回车符就能画出来不需要额外依赖。项目结构这个项目整理得很清楚。按功能分成了 16 个章节Strings字符串Arrays数组Loops循环File Handling文件处理File Paths路径Variables变量Escape Sequences转义序列Parameter Expansion参数扩展Brace Expansion花括号展开Conditional Expressions条件表达式Arithmetic Operators算术运算Traps信号处理Performance性能优化Code Golf代码简化技巧Other其他每个技巧都有函数示例和使用示例可以直接复制到自己的脚本里。实际效果怎么样我测试了几个常用的技巧。字符串处理那几个函数处理几 MB 的文本比调用外部命令快 2-3 倍。文件读取那部分用read替代cat在循环里效果明显。不过也有局限。有些复杂操作比如多行文本替换纯 bash 写起来还是麻烦。项目里也提到对于特别复杂的场景外部工具可能是更好的选择。适合什么人如果你经常写 bash 脚本特别是需要处理大量文件或字符串的这个项目值得收藏。里面的技巧不一定每天都能用上但遇到性能问题的时候翻一翻能找到不少灵感。项目本身是 MIT 协议代码直接可用。作者还出了个 pure-sh-bible专门针对 POSIX sh兼容性更好。的技巧不一定每天都能用上但遇到性能问题的时候翻一翻能找到不少灵感。项目本身是 MIT 协议代码直接可用。作者还出了个 pure-sh-bible专门针对 POSIX sh兼容性更好。