• 本页内容

48. read


bash read 命令用于以交互方式(甚至从文件中以非交互方式)获取用户输入并将其存储在变量中。

您可以在同一读取语句中读取一个值或多个值(空格、逗号或制表符分隔)。 当您输入多个值时,第一个单词将转到第一个变量,第二个单词将转到第二个变量,依此类推。 当值多于变量时,最后一个变量将保存剩余的单词; 当变量多于值时,附加变量将为空。

以下是读取命令的一些最常用的变体:

$ cat read.sh
echo -n "Enter your nick name: "
read name
echo "Good morning, $name"
echo -n "Enter your first name and last name: "
read fname lname
echo "Good morning, $fname $lname"
echo -n "Enter your first name, last name, and something else: "
read fname lname remaining
echo "Good morning, $fname $lname. You said: $remaining"
echo -n "Enter anything: "
read -a arr
echo "Array values: $arr"
read -p "Enter your name: " name1
echo $name1
read -s -p "Enter your password: " password
echo "Your password is: $password"
read -t 5 -p "Enter the value within 5 seconds: " timeout
echo "You entered: $timeout"
read -N 5 -p "Read will read exactly 5 character: " charact
echo "You entered: $charact"
read -r -p "Enter a value with back slash: " good
echo $good

要记住的要点:

  • read -a arrayname :读取的值分配给从0开始的数组。
  • read -p prompt:在读取值之前显示提示。 这比给出 echo 语句更容易、更快捷。
  • read -s:这不会回显您输入的值。 这对于读取用户的任何敏感信息很有用。
  • read -t 10:如果用户未输入任何内容,read 将等待 10 秒并超时。
  • read -r:在读命令中,如果要多行输入值,可以在输入值时使用\。 但是,如果您希望 read 按字面意思处理\而不是换行),则应使用read -r
  • 不带变量名读取:如果不指定变量名,bash 会将值存储在$REPLY bash 内部变量中。

您还可以从文件中读取值,如下所示。

$ cat test.txt
this is good

$ read var <test.txt

$ echo $var
this is good