#Bash 的 read 命令
read [OPTION]... [NAME]...
功能
读取一行输入并将其拆分进多个字段。
类型
Bash 内置命令。
参数
OPTION选项:-a array- 将读取到的单词依次分配给数组变量array-d delim- 指定delim作为行分隔符;默认为换行符(\n)-e- 使用 Readline 获取行-i text- 使用text作为 Readline 的提示符-n nchars- 最多读取nchars个字符-N nchars- 最多读取nchars个字符,并且忽略行分隔符-p prompt- 打印prompt作为提示符-r- 不允许使用反斜杠转义任何字符-s- 不要回显来自终端的输入-t timeout- 超时时间-u fd- 从文件描述符fd读取输入;默认为标准输入
NAME- 要写入的变量名列表;省略此参数则默认写入数组变量REPLY
#示例
$ read x y < <(echo 1 2 3) # 将 1 2 3 写入 x y
$ echo $x
1
$ echo $y # 最后一个变量会写入剩余的全部
2 3
注意,不能使用
echo 1 2 3 | read x y,因为管道|运行在子 shell 中,使得外层 shell 没有x,y变量。
#相关命令
mapfile和readarray是完全相同的命令。
#手册
read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
Read a line from the standard input and split it into fields.
Reads a single line from the standard input, or from file descriptor FD
if the -u option is supplied. The line is split into fields as with word
splitting, and the first word is assigned to the first NAME, the second
word to the second NAME, and so on, with any leftover words assigned to
the last NAME. Only the characters found in $IFS are recognized as word
delimiters. By default, the backslash character escapes delimiter characters
and newline.
If no NAMEs are supplied, the line read is stored in the REPLY variable.
Options:
-a array assign the words read to sequential indices of the array
variable ARRAY, starting at zero
-d delim continue until the first character of DELIM is read, rather
than newline
-e use Readline to obtain the line
-i text use TEXT as the initial text for Readline
-n nchars return after reading NCHARS characters rather than waiting
for a newline, but honor a delimiter if fewer than
NCHARS characters are read before the delimiter
-N nchars return only after reading exactly NCHARS characters, unless
EOF is encountered or read times out, ignoring any
delimiter
-p prompt output the string PROMPT without a trailing newline before
attempting to read
-r do not allow backslashes to escape any characters
-s do not echo input coming from a terminal
-t timeout time out and return failure if a complete line of
input is not read within TIMEOUT seconds. The value of the
TMOUT variable is the default timeout. TIMEOUT may be a
fractional number. If TIMEOUT is 0, read returns
immediately, without trying to read any data, returning
success only if input is available on the specified
file descriptor. The exit status is greater than 128
if the timeout is exceeded
-u fd read from file descriptor FD instead of the standard input
Exit Status:
The return code is zero, unless end-of-file is encountered, read times out
(in which case it's greater than 128), a variable assignment error occurs,
or an invalid file descriptor is supplied as the argument to -u.