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