read

read命令用来从标准输入中读取数据并赋值给变量. 如果没有进行重定向, 默认就是从键盘读取用户输入的数据; 如果进行了重定向, 那么可以从文件中读取数据.

read命令的用法为:

read [-options] [variables]

options表示选项, 是可选的; variables表示用来存储数据的变量, 可以有一个, 也可以有多个; 如果没有提供变量名, 那么读取的数据将存放到环境变量REPLY中.

Shell read命令支持的选项:

-a array 把读取的数据赋值给数组array, 从下标0开始.
-d delimiter

用字符串delimiter指定读取结束的标志,

而不是一个换行符(读取到的数据不包括delimiter).

-e

在获取用户输入的时候, 对功能键进行编码转换,

不会直接显示功能键对应的字符.

-n num 读取n个字符, 而不是整行字符
-p prompt 显示提示信息, 提示内容为prompt.
-r 原样读取(Raw mode), 不把反斜杠字符解释为转义字符.
-s

静默模式(Slient mode), 不会在屏幕上显示输入的字符.

当输入密码和其它确认信息时, 这是很有必要的.

-t seconds

设置超时时间, 单位为秒.

如果用户没有在指定时间内输入完成,

那么read将返回一个非0的退出状态, 表示读取失败.

-u fd 使用文件描述符fd作为输入源, 而不是标准输入, 类似于重定向.

Example1 - 使用read给多个变量赋值:

#!/usr/bin/env bash

read -p "Enter some information >" name age

注意, 使用read给多个变量赋值时, 必须在一行中输入所有的值, 不能换行.

Example2 - 只读取一个字符:

#!/usr/bin/env bash

read -n 1 -p "Enter a char > " char
printf "\n"
echo $char