Не может выполнить это чтение операторы правильно?

Read a b c 
Echo $a $b $ c

Это принимает только значение a. Что я должен сделать, так, чтобы мой первый код мог быть выполнен правильно?

1
задан 5 January 2016 в 18:54

3 ответа

Необходимо дать ему три значения, разделенные пробелами:

echo 1 2 3 | read a b c; echo $a; echo $b; echo $c
1
2
3
0
ответ дан 29 September 2019 в 17:15

Необходимо передать значения как это:

$ read a b c
1 2 3
$ echo $a $b $c
1 2 3

Этот путь то, что это хорошо работало. Просто необходимо передать значения, разделенные пространством.

0
ответ дан 29 September 2019 в 17:15

От 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
0
ответ дан 29 September 2019 в 17:15

Другие вопросы по тегам:

Похожие вопросы: