1973:管線(pipe)誕生#
事件#
1973 年,UNIX 第三版引入管線(pipeline),由 Doug McIlroy 提出構想、Ken Thompson 在一天內實作完成。| 成為 shell 語言中最具代表性的運算子。
理論與實用原因#
1. 管線 |#
- 理論原因:McIlroy 的哲學——「讓每個程式做好一件事;期望每個程式的輸出成為另一個程式的輸入」。管線是「以程式組合程式」的最簡語法。
- 實用原因:
who | sort | grep tty一行就完成「誰在線上、排序、過濾」三件事,不需要寫任何新程式。 - 彌補缺陷:以前組合程式必須透過中間暫存檔(
prog1 > tmp; prog2 < tmp),既慢(磁碟 I/O)又醜(要管理暫存檔)。
2. 文字流作為通用介面#
- 理論原因:文字是最低公分母的資料格式,任何程式都能讀寫。
- 實用原因:管線傳遞的預設就是標準輸入/輸出,程式不需要知道彼此的存在。
- 缺陷伏筆:純文字流沒有結構(欄位、型別),解析文字成為 shell script 五十年來的痛點,也是 2020 年代 nushell 等結構化 shell 的改革動機。
程式範例:管線的威力#
# 以前:組合程式必須透過中間暫存檔
who > tmp
sort < tmp > tmp2
grep tty < tmp2
rm tmp tmp2
# 1973 年後:管線一行搞定,不需暫存檔、不需磁碟 I/O
who | sort | grep tty
# 經典組合:統計每個使用者登入次數
who | cut -d' ' -f1 | sort | uniq -c | sort -rn
# 檔案字數統計:wc 做好一件事,管線組合出報表
cat *.c | wc -l # 所有 C 檔案總行數
# 缺陷伏筆:管線傳的是純文字,解析靠 awk 拼接(五十年後 nushell 改革此點)
ps aux | awk '$3 > 50 {print $2}' # CPU 使用率 > 50% 的行程 ID——脆弱的文字解析
彌補了什麼缺陷#
彌補了「程式組合必須經過磁碟暫存檔」的效率與工程缺陷,把 UNIX 從「一組工具」升級為「一種思維方式」,也奠定了 shell script 作為膠水語言的核心地位。