read

Read one line from the standard input, (or from a file) and assign the word(s) to variable name(s).

Syntax
 read [-ers] [-a aname] [-d delim] [-i text] [-n nchars]
 [-N nchars] [-p prompt] [-r] [-s] [-t timeout] [-u fd]
 [name...]
Key
 -a aname
 The words are assigned to sequential indices of the array variable aname, starting at 0.
 aname is unset before any new values are assigned. Other name arguments are ignored.
 
 -d delim
 The first character of delim is used to terminate the input line, rather than newline.
 -e If the standard input is coming from a terminal, readline is used to obtain the line.
 -i text
 If readline is being used to read the line, text is placed into the editing buffer before
 editing begins. 
 -n nchars
 read returns after reading nchars characters rather than waiting for a complete line
 of input.
 -N nchars
 read returns after reading exactly nchars characters rather than waiting for a complete
 line of input, unless EOF is encountered or read times out. Delimiter characters
 encountered in the input are not treated specially and do not cause read to return
 until nchars characters are read. 
 -p prompt
 Display prompt on standard error, without a trailing newline, before attempting to read
 any input. The prompt is displayed only if input is coming from a terminal.
 -r Do not treat a Backslash as an escape character. The backslash is considered to be part
 of the line. In particular, a backslash-newline pair can not be used as a line continuation.
 Without this option, any backslashes in the input will be discarded.
 You should almost always use the -r option with read.
 -s Silent mode. If input is coming from a terminal, characters are not echoed.
 -t timeout
 Cause read to time out and return failure if a complete line of input is not read
 within timeout seconds. This option has no effect if read is not reading input from
 the terminal or a pipe.
 -u fd
 Read input from file descriptor fd.
 name
 The name(s) to assign to each word.
 If no names are supplied, the line read is assigned to the variable $REPLY.

This is a BASH shell builtin, to display your local syntax from the bash prompt type: help [r]ead

One line is read from the standard input, and the first word is assigned to the first name, the second word to the second name, and so on, with leftover words and their intervening separators assigned to the last name.

The read command modifies each line read; by default it removes all leading and trailing whitespace characters (spaces and tabs, or any whitespace characters present in IFS). If that is not desired, the IFS variable can be cleared with IFS=

If there are fewer words read from the standard input than names, the remaining names are assigned empty values.
The characters in the value of the IFS variable are used to split the line into words.

The backslash character '\' can be used to remove any special meaning for the next character read, and for line continuation.

The return code is zero, unless end-of-file is encountered or read times out.

Examples

Loop through a text file 'demo.txt' and print each line:

while IFS= read -r line; do
echo "Line: $line"
done <demo.txt

Prompt for some values and then display on screen horizontally and then vertically:

#!/bin/bash
# Read a value and save to the variable $var_year
read var_year
echo "The year is: $var_year"

# Read a value and save to the variable $var_name
echo "Enter your name and press [ENTER]: "
read var_name
echo "Your name is: $var_name"

# Read a value using the default variable $REPLY
$ read
$ echo You entered $REPLY

# Read a password value from input and then set a default '1234' if it is empty:
read passw
passw="${passw:=1234}"

# Set a variable 'ret1' to four different values in turn, and just echo each to the screen:
$ echo "First Second Third Fourth " | while read -r -d ' ' ret1; do printf "=$ret1="; done =First==Second==Third==Fourth=

# as above but adding a newline '\n':
$ echo "First Second Third Fourth " | while read -r -d ' ' ret1; do printf "=$ret1= \n"; done
=First=
=Second=
=Third=
=Fourth=

"Programs are meant to be read by humans and only incidentally for computers to execute" ~ Donald Knuth

Related Linux commands

mapfile - Read lines from standard input into an indexed array variable.
select - Accept keyboard input.
Equivalent Windows commands: SET /P - Prompt for user input.

(追記) (追記ここまで)
Copyright © 1999-2026 SS64.com
Some rights reserved

AltStyle によって変換されたページ (->オリジナル) /