跳轉到

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」的生態缺陷。

相關條目#