本页内容

  • Linux read 命令示例
  • read 命令的命令行选项

Bash 中的 read 命令从标准输入读取一行,并将其拆分为多个字段。

Linux read 命令示例

Linux 中的 read 命令是一个内置命令,用于 shell 脚本和命令行中,从标准输入(stdin)读取一行输入并将其赋值给一个变量。以下是一些使用 read 命令的示例:

基本用法:

read
 varname

echo
 
"You entered: 
$varname
"

该脚本会等待用户输入一些文本,随后将其存入变量 varname。当用户按下回车键后,脚本会显示所输入的文本。

读取多个值:

echo
 
"Enter two values:"


read
 var1 var2

echo
 
"You entered: 
$var1
 and 
$var2
"

这样可以让用户输入两个独立的值,它们会被分别存入 var1 和 var2。两个值之间应以空格分隔。

静默输入(适用于密码):

read
 
-s
 -p 
"Enter your password: "
 password

echo


echo
 
"Password entered."

-s 选项使 read 进入静默模式,即不会将输入回显到终端。这对于密码等敏感信息非常有用。-p 选项允许你显示一条提示符。

读取包含空格的整行:

IFS= 
read
 -r line

echo
 
"You entered: 
$line
"

通过将 IFS(内部字段分隔符)设置为空值,并使用 -r 选项(防止反斜杠转义被解释),整行输入(包括空格)都会被读入变量 line 中。

设置超时:

read
 -t 5 -p 
"Enter your name (you have 5 seconds): "
 name

echo
 
"Hello, 
$name
"

-t 选项用于设置超时。在本例中,read 会等待 5 秒以让用户输入其姓名。

从文件读取:

while
 IFS= 
read
 -r line

do

  
echo
 
"Line: 
$line
"


done
 < filename.txt

该脚本会逐行读取名为 filename.txt 的文件中的内容。

read 命令的命令行选项

以下是它的一些常用选项:

  • -r:该选项阻止反斜杠充当转义字符。使用 -r 时,反斜杠会被当作字面字符处理。通常建议使用该选项,以确保输入被准确读取,避免对反斜杠转义字符产生任何非预期的解释。
  • -p:该选项允许你指定一条显示给用户的提示符。当你与用户交互并等待其输入时,它常被使用。例如,read -p "Enter your name: " name 会显示“Enter your name: ”,然后将用户的输入存入变量 name。
  • -a array:该选项从标准输入读取内容,并将读取到的单词赋给一个索引数组。这在将一行输入读入数组时很有用,此时每个单词都会成为数组的一个元素。
  • -d delim:该选项指定一个分隔符字符来终止输入行,而不是使用换行符。例如,read -d ":" var 会一直读取输入,直到遇到冒号字符为止。
  • -n num:该选项读取 num 个字符,而非完整的一行。当你需要将输入限制为特定数量的字符时,它很有用。
  • -s:静默模式。使用 -s 时,用户输入的内容不会显示在屏幕上。它通常用于密码等敏感输入。
  • -t timeout:以秒为单位指定超时时间。如果用户在规定秒数内没有提供输入,read 命令将终止。对于不希望无限期等待用户输入的脚本,这很有用。
  • -u fd:该选项让 read 从文件描述符 fd 读取输入,而不是从标准输入读取。这是一个高级特性,适用于需要在脚本中操作文件描述符的场景。
  • -N num:与 -n 类似,但它读取的是 num 个字符,而非字节。在多字节字符的场景下尤其重要。
  • -E:与 -p 配合使用时,该选项会禁用提示符字符串中对反斜杠转义和换行续接的解释。
  • -i text:该选项为 read 提供初始文本。在提供可让用户编辑的默认值时特别有用。

-r:该选项阻止反斜杠充当转义字符。使用 -r 时,反斜杠会被当作字面字符处理。通常建议使用该选项,以确保输入被准确读取,避免对反斜杠转义字符产生任何非预期的解释。

-p:该选项允许你指定一条显示给用户的提示符。当你与用户交互并等待其输入时,它常被使用。例如,read -p "Enter your name: " name 会显示“Enter your name: ”,然后将用户的输入存入变量 name。

-a array:该选项从标准输入读取内容,并将读取到的单词赋给一个索引数组。这在将一行输入读入数组时很有用,此时每个单词都会成为数组的一个元素。

-d delim:该选项指定一个分隔符字符来终止输入行,而不是使用换行符。例如,read -d ":" var 会一直读取输入,直到遇到冒号字符为止。

-n num:该选项读取 num 个字符,而非完整的一行。当你需要将输入限制为特定数量的字符时,它很有用。

-s:静默模式。使用 -s 时,用户输入的内容不会显示在屏幕上。它通常用于密码等敏感输入。

-t timeout:以秒为单位指定超时时间。如果用户在规定秒数内没有提供输入,read 命令将终止。对于不希望无限期等待用户输入的脚本,这很有用。

-u fd:该选项让 read 从文件描述符 fd 读取输入,而不是从标准输入读取。这是一个高级特性,适用于需要在脚本中操作文件描述符的场景。

-N num:与 -n 类似,但它读取的是 num 个字符,而非字节。在多字节字符的场景下尤其重要。

-E:与 -p 配合使用时,该选项会禁用提示符字符串中对反斜杠转义和换行续接的解释。

-i text:该选项为 read 提供初始文本。在提供可让用户编辑的默认值时特别有用。

read 命令是 Bash 脚本中用于处理用户输入和解析文本的强力工具。你可以根据需要组合这些选项,以满足你的具体需求。