GNU项目于1989年发布的Unix Shell与脚本语言,全名Bourne Again Shell,是当今绝大多数Linux发行版与macOS的默认命令行环境,也是服务器自动化和CI/CD流水线的核心脚本工具。

| 首次发布 | 1989年 |
| 作者 | Brian Fox(GNU项目) |
| 范式 | 脚本、命令式、管道 |
Bash的前身是Stephen Bourne在1979年为Unix V7编写的Bourne Shell(/bin/sh)。Brian Fox在1989年为GNU项目编写了Bash,名字是「Bourne Again Shell」的双关——既是重写,也是对Bourne的致敬。Bash在兼容Bourne Shell语法的基础上增加了命令历史、目录栈、算术运算、数组、联想数组(Bash 4.0,2009年)等特性。
Bash最根本的能力是把命令行工具组合成自动化流程。管道(|)把一个程序的输出直接送入下一个程序的输入;重定向(>、<、2>&1)控制文件与标准流;命令替换($(command))把命令输出作为值使用。这套组合机制让几十年积累的Unix命令行工具可以自由搭配,完成文件批处理、日志分析、服务器配置等任务,不需要额外安装运行时或编译器。[1]
Bash脚本因「容易写出有隐患的代码」而声名狼藉。几个经典陷阱:变量不加引号会被分词和通配符展开(rm $file如果file是「hello world.txt」会变成删两个文件);未定义变量默认为空字符串而不是报错;管道中间命令的失败不会自动终止脚本,set -o pipefail才能改变这个行为;set -e遇错退出看似安全,但在某些场景有反直觉的副作用。
尽管如此,Bash在运维场景里几乎不可替代:它在任何Linux系统上都有,无需安装依赖,启动开销几乎为零。CI/CD系统(GitHub Actions、GitLab CI、Jenkins)的任务脚本默认就是Bash。ShellCheck是静态分析工具,能检测大量常见错误,是现代Bash开发的必备工具。Bash 5.0(2019年)和5.2(2022年)持续加入改进,macOS从Catalina(10.15)起因GPLv3授权问题将默认Shell改为zsh,但Bash仍保留在系统中。
[[是Bash内置的条件判断,比外部命令[更安全且支持正则匹配<)是多行字符串的标准写法<(cmd))是Bash特有的、让命令输出作为文件描述符的能力
| 首次发布 | 1989年 |
| 作者 | Brian Fox(GNU项目) |
| 范式 | 脚本、命令式、管道 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧