1988:Bash 誕生(GNU 專案)#
事件#
1988 年,Brian Fox 在自由軟體基金會(FSF)開始撰寫 Bash(Bourne Again Shell),作為 GNU 作業系統的 shell。1990 年起由 Chet Ramey 接手維護至今。Bash 名字雙關「重生的 Bourne Shell」——它的使命是成為自由軟體版本的 Bourne Shell,並符合 POSIX shell 標準。
誕生的理論與實用原因#
1. 自由軟體運動需要自由的 shell#
- 理論原因:Richard Stallman 的 GNU 計畫主張——作業系統的每個組件都必須是自由軟體。
- 實用原因:當時的 Bourne Shell 與 ksh 是 AT&T 的專有軟體,Unix 使用者無法自由修改與散布。
- 彌補缺陷:自由軟體作業系統(GNU/Hurd、後來的 Linux)若無自由 shell,就違反了 GNU 的基本承諾。
2. POSIX 相容為骨、Bourne 相容為血#
- 理論原因:POSIX.2 標準(當時正在制定)以 Bourne Shell 為藍本;ksh(1983)證明相容性是可移植性的基礎。
- 實用原因:
#!/bin/sh的腳本可以在 bash 上直接執行,企業的既有投資不會浪費。 - 彌補缺陷:csh 系(csh/tcsh)腳本語法與 sh 不相容的分裂災難。
3. 吸收 ksh/csh 的交互功能#
- 實用原因:歷史命令、別名、命令列編輯、工作控制一次到位。
- 彌補缺陷:原始 Bourne Shell 互動體驗貧乏。
4. 以 readline 函式庫實作命令列編輯#
- 理論原因:程式庫重用(code reuse)——行編輯能力抽成獨立函式庫,其他 GNU 程式(如 gdb)也能用。
- 實用原因:emacs/vi 模式、歷史搜尋(
Ctrl-R)一次擁有,且持續隨 readline 演進。
歷史意義#
Bash 是「開源運動 × UNIX 傳統」的關鍵交會點:它繼承 Bourne/ksh 的語法遺產,用自由授權重新發行,並在 1991 年 Linux 問世後成為全世界裝機量最大的 shell。1992 年 POSIX.2 標準化時,bash 已是標準的參考實作之一。
程式範例:Bash 的使命——自由的 Bourne Shell#
#!/bin/bash
# bash = Bourne Again Shell:Bourne 語法照常執行
for f in *.c; do
echo "編譯 $f"
done
# 再加上 ksh/csh 的交互功能與 GNU 擴充
HISTSIZE=1000 # 歷史命令數(csh 傳統)
alias ll='ls -l' # 別名(csh 傳統)
set -o emacs # 命令列編輯(ksh 傳統 + readline)
# 自由授權的意義:使用者可以檢查、修改、散布
bash --version # GNU Bash,GPL 授權
bash --posix script.sh # POSIX 嚴格模式
彌補了什麼缺陷#
彌補了「UNIX shell 是專有軟體」的授權缺陷,以及「自由作業系統沒有高品質 shell」的生態缺陷。