深入瞭解 macOS 上的命令列計算機工具 bc

bc 的歷史背景
bc 的全名是「basic calculator」或「bench calculator」,是一個支援任意精度運算的計算器語言。它的歷史可以追溯到 1975 年,首次出現在 Version 6 Unix 中。當時由貝爾實驗室的 Lorinda Cherry 開發,作為另一個計算器程式 dc(desk calculator) 的前端介面。
dc
使用的是反波蘭記法(Reverse Polish Notation),輸入方式對一般使用者來說較為陌生。而 bc
則提供了類似 C 語言的語法,讓使用者能以更直觀的方式進行計算。
不同的 bc 實作版本
隨著時間發展,bc
衍生出了幾個不同的實作版本:
1. 傳統 Unix 實作
最初的 bc
實作是作為 dc
的前端,將 bc 程式碼轉換成 dc 指令。這個版本仍然存在於一些 Unix 和 Plan 9 系統中。
2. GNU bc
GNU bc 由 Philip A. Nelson 開發,首次發布於 1991 年。這個版本不再是 dc
的前端,而是一個獨立的位元組碼直譯器,使用 C 語言編寫。GNU bc 在 GPL3 授權下發布,並加入了許多擴展功能,如:
- 支援多字元的變數名稱
- 添加了
&&
、||
、!
等邏輯運算子 if
語句可以使用else
子句- 新增
print
語句用於輸出
值得注意的是,GNU bc 在 2017 年 4 月發布 1.07.1 版後,曾經有將近 8 年沒有更新。不過就在最近,2024 年 12 月和 2025 年 1 月,GNU bc 連續發布了 1.08.0 和 1.08.1 版本,打破了長期停滯的狀態。
3. OpenBSD 實作
OpenBSD 在 2003 年重新實作了自己的 bc
版本,以符合他們對系統安全性和授權條款的要求。
4. Gavin Howard 的實作(macOS 採用版本)
這是 macOS 上使用的版本,由 Gavin Howard 個人開發,從 2018 年開始的專案。這個版本採用 BSD 授權,具有以下特點:
- 完全相容 POSIX 標準,同時實作了 GNU 擴展和 BSD 的點號(.)擴展
- 用同一個執行檔同時提供
bc
和dc
功能(透過符號連結) - 在效能和穩定性上有許多改進
- 提供更完善的錯誤處理
- 支援更多的數學函數擴展
macOS 上的 bc
根據作者 Gavin Howard 在部落格中的說明,他的 bc
實作是從 macOS 13 Ventura 開始被 Apple 收錄進 macOS的。在此之前,macOS 使用的是其他版本。
截至 2025 年,查看各版本的狀況:
- macOS 13.2.1 搭載的是 4.0.2 版
- macOS 14.4 已更新到 6.5.0 版
- macOS 15.4 更新到 6.7.6 版
macOS 採用的 bc 版本對應可參考 Apple Open Source 和 apple-oss-distributions/bc @ GitHub
這個版本也被 FreeBSD 採用,在 FreeBSD 13.3-RELEASE 中成為預設版本。目前這個專案持續活躍開發中,最新版本是 6.4.0(2024年釋出)。
與其他工具的比較
雖然有許多命令列計算工具(如 Python、dc、expr 等),bc
仍有其獨特優勢:
- 任意精度運算(不受浮點數精度限制)
- 類 C 語言語法,易於學習
- 輕量級,啟動快速
- 幾乎在所有 Unix-like 系統上都可用
- 可編寫腳本,支援函數和流程控制
結語
bc
雖然是一個古老的工具,但它的設計理念和功能在今天仍然實用。特別是 macOS 採用的 Gavin Howard 實作版本,不僅保持了與傳統的相容性,還加入了現代化的改進。對於經常需要在終端機進行計算的使用者來說,熟悉 bc
絕對能提升工作效率。
而令人興奮的是,原本被認為已經停止開發的 GNU bc,在沉寂近 8 年後,最近又有了新的更新,顯示這個經典工具仍然保有生命力。這也反映了命令列工具在現代計算環境中的持續重要性。
Subscribe to my newsletter
Read articles from Chris Yuan directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
