I/O 專案:建立一個命令列程式

本章節用來回顧你目前學過的許多技能,並探索些標準函式庫中的更多功能。我們會來建立個命令列工作來處理檔案與命令列輸入/輸出,以此練習些你已經掌握的 Rust 概念。

Rust 的速度、安全、單一二進制輸出與跨平台支援使其成為建立命令列工具的絕佳語言。所以在我們的專案中,我們要寫出我們自己的經典命令列工具 grepglobally search a regular expression and print)。在最簡單的使用場合中,grep 會搜尋指定檔案中的指定字串。為此 grep 會接收一個檔案名稱與一個字串作為其引數。然後它會讀取檔案、在該檔案中找到包含字串引數的行數,並印出這些行數。

在過程中,我們會展示如何讓我們的命令列工具和其他許多命令列工具一樣使用終端機的功能。我們會讀取一個環境變數的數值來讓使用者可以配置此工具的行為。我們還會將錯誤訊息在控制台中的標準錯誤(stderr)顯示而非標準輸出(stdout)。所以舉例來說,使用者可以將成功的標準輸出重新導向至一個檔案,並仍能在螢幕上看到錯誤訊息。

其中一位 Rust 社群成員 Andrew Gallant 已經有建立個功能完善且十分迅速的 grep 版本,叫做 ripgrep。相比之下,我們的 grep 版本會相對簡單許多,但此章節能給你些背景知識,來幫你理解像是 ripgrep 等真實專案。

我們的 grep 專案會組合你所學過的各種概念:

我們還會簡單介紹閉包、疊代器與特徵物件,這些在第十三章第十七章會做詳細介紹。