LINUX.ORG.RU
ФорумAdmin

Чтение в массив из stdin

 , ,


3

1

Здравствуйте!

Например:

declare -a a
echo -n {1..3} | xargs -n 1 | mapfile a
echo ${a[@]}

Не работает.
echo -n {1..3} | xargs -n 1 | /usr/bin/read -a a
echo ${a[@]}

Так же не работает.
mapfile a
1 
2 
3
^D
echo ${a[@]}
1 2 3
echo ${a[1]}
2
Работает.

Что я делаю не так?

| запускает всё, что справа, в отдельном процессе.

declare -a a
mapfile a < <(echo -n {1..3} | xargs -n 1)
echo ${a[@]}
shdown
()
Ответ на: Спасибо, так работает. от Cave-Canem

А можно подробнее про перенаправление «< <( )»? Где почитать?

< <( ) = < + <( ). Про всё можно почитать в man bash.

   Process Substitution
       Process  substitution allows a process's input or output to be referred
       to using a filename.  It takes the form of  <(list)  or  >(list).   The
       process  list is run asynchronously, and its input or output appears as
       a filename.  This filename is passed as an argument to the current com‐
       mand  as  the  result  of  the expansion.  If the >(list) form is used,
       writing to the file will provide input for list.  If the  <(list)  form
       is  used,  the  file passed as an argument should be read to obtain the
       output of list.  Process substitution is supported on systems that sup‐
       port named pipes (FIFOs) or the /dev/fd method of naming open files.

       When  available,  process substitution is performed simultaneously with
       parameter and variable expansion, command substitution, and  arithmetic
       expansion.
shdown
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.