首頁 > 環境與工具程式 > read

read:讀取使用者輸入

read 命令從標準輸入 (stdin) 或指定的檔案描述符讀取一行,並將其儲存到一個或多個變數中。它主要用於在 shell 腳本中獲取使用者輸入或處理檔案內容。此命令內建於大多數 shell 中,例如 Bash、Zsh 等。

概述

read 在腳本從使用者獲取資訊、或從管道或檔案讀取資料並將其分配給變數時扮演著關鍵角色。透過各種選項,您可以精確控制輸入方式和處理方法。

主要功能

  • 從使用者讀取一行輸入
  • 將輸入的內容儲存到變數中
  • 顯示提示訊息
  • 設定輸入逾時
  • 隱藏敏感輸入(例如密碼)

主要選項

read 命令的主要選項有助於多樣化控制使用者輸入的處理方式。

輸入控制

生成的命令:

請試著組合命令。

這個 Django 應用程序是一個技術指南文檔,旨在為用戶輕鬆解釋 Linux 的各種命令。

`read` 執行命令。

請將上述選項組合在一起,與 AI 一同虛擬執行命令。

使用範例

透過 read 命令的各種應用範例,您可以學習使用者輸入的處理方法。

基本輸入讀取

read name
echo "您好, $name!"

從使用者那裡讀取姓名並將其儲存到變數中。

帶提示訊息的輸入讀取

read -p "您喜歡什麼顏色? " color
echo "您喜歡 $color。"

向使用者提出問題並讀取答案。

設定逾時

echo "請在 5 秒內輸入您的姓名:"
read -t 5 name
name=${name:-"訪客"}
echo "您好, $name!"

如果在 5 秒內沒有輸入,則使用預設值進行處理。

隱藏密碼輸入

read -s -p "請輸入密碼: " password
echo "\n已輸入密碼。"

使輸入的字元不會顯示在螢幕上。

將輸入分割儲存到多個變數

read -p "請輸入姓名和年齡(例如:張三 30): " name age
echo "姓名:$name, 年齡:$age"

將以空格分隔的輸入按順序儲存到多個變數中。

逐行讀取檔案

echo -e "Line 1\nLine 2\nLine 3" > example.txt
while IFS= read -r line; do
  echo "讀取的行:$line"
done < example.txt
rm example.txt

逐行讀取檔案內容並進行處理的常見模式。

提示與注意事項

為了更有效率且安全地使用 read 命令,請參閱以下提示與注意事項。

使用 read -r 的重要性

read -r 選項不會將反斜線 (\) 解譯為跳脫字元,而是將其視為一般字元處理,確保輸入的字串能被正確儲存到變數中。特別是在讀取可能包含特殊字元的輸入(例如檔案路徑)時,為了防止資料遺失或誤操作,建議始終使用此選項。

  • 範例(反斜線處理): echo 'C:\Users\User' | read path; echo $path -> C:UsersUser (移除反斜線) echo 'C:\Users\User' | read -r path; echo $path -> C:\Users\User (保留反斜線)

利用 IFS 變數

IFS (Internal Field Separator) 變數定義了 read 命令在分割輸入單字時使用的分隔符。預設值是空格、Tab 和換行符。透過修改 IFS,您可以輕鬆解析以逗號 (,) 或冒號 (:) 等分隔的資料。

  • 範例(逗號分隔): echo "apple,banana,cherry" | IFS=, read -r fruit1 fruit2 fruit3 echo "第一個水果:$fruit1, 第二個水果:$fruit2"

安全注意事項:切勿與 eval 一同使用

直接將使用者輸入的值與 eval 命令一同使用在安全性上是極其危險的。這可能導致惡意使用者執行任意程式碼的漏洞。使用者輸入應始終被視為不可信的資料,並在需要時進行嚴格驗證。

  • 不良範例: read -p "請輸入命令: " cmd eval "$cmd" # 切勿如此使用!

檔案處理時的 while read 模式

在逐行讀取檔案內容並進行處理時,`while IFS= read -r line` 模式非常強大且有效。`IFS=` 可防止前導/尾隨空格被移除,而 `-r` 可防止反斜線被處理,從而確保檔案內容被準確讀取。

  • 常見用法: while IFS= read -r line; do # $line 變數將儲存檔案的每一行。 echo "處理中:$line" done < your_file.txt

相同類別命令