Read a b c
Echo $a $b $ c
Это принимает только значение a
. Что я должен сделать, так, чтобы мой первый код мог быть выполнен правильно?
Необходимо дать ему три значения, разделенные пробелами:
echo 1 2 3 | read a b c; echo $a; echo $b; echo $c
1
2
3
Необходимо передать значения как это:
$ read a b c
1 2 3
$ echo $a $b $c
1 2 3
Этот путь то, что это хорошо работало. Просто необходимо передать значения, разделенные пространством.
От help read
:
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.
Так read
willl читают одну строку из STDIN и разделяют его на символах, содержавшихся в $IFS
, присвоение каждого поля к каждому ИМЕНИ и потенциальных чрезмерных полей к фамилии.
$IFS
по умолчанию содержит пространство, табулирование и новую строку, так по умолчанию read
разделит его вход каждый раз, когда пространство или табулирование найдены (новая строка по умолчанию используется read
разделять записи, таким образом, это будет использоваться для разделения записей скорее затем для разделения полей, даже если новая строка будет содержаться в $IFS
).
Таким образом, необходимо установить $IFS
на основе того, как Вы хотите разделить вход.
Предположение, что Вы хотите сохранить разделенные пробелом значения (и следовательно разделение входа на символах, содержавшихся в $IFS
по умолчанию прекрасен), необходимо сделать что-то вроде этого:
read a b c
echo $a $b $c
$ read a b c
aaa bbb ccc
$ echo $a $b $c
aaa bbb ccc
$ echo $a
aaa
$ echo $b
bbb
$ echo $c
ccc
Если Вы хотите сохранить, например, разделенные от запятой значения, установить $IFS
кому: ,
для объема read
выполнение:
IFS=, read a b c
echo $a $b $c
$ IFS=, read a b c
aaa,bbb,ccc
$ echo $a $b $c
aaa bbb ccc
$ echo $a
aaa
$ echo $b
bbb
$ echo $c
ccc
Если Вы хотите сохранить разделенные от новой строки значения (или если Вы хотите ввести каждое значение, разделяющее его от следующего с помощью нажатия клавиши ENTER в этом отношении), необходимо будет считать вход три раза:
read a
read b
read c
echo $a $b $c
$ read a
aaa
$ read b
bbb
$ read c
ccc
$ echo $a $b $c
aaa bbb ccc
$ echo $a
aaa
$ echo $b
bbb
$ echo $c
ccc