Я застрял со странным поведением readarray
команды.
В man bash
гласит:
readarray
Read lines from the standard input into the indexed array variable array
но эти скрипты не работают (массив пуст):
unset arr; (echo a; echo b; echo c) | readarray arr; echo ${#arr[@]}
unset arr; cat /etc/passwd | readarray arr; echo ${#arr[@]}
И эти работы:
unset arr; readarray arr < /etc/passwd ; echo ${#arr[@]}
unset arr; mkfifo /tmp/fifo; (echo a; echo b; echo c) > /tmp/fifo & mapfile arr < /tmp/fifo ; echo ${#arr[@]}
Что не так с трубой?
< <
2 стрелки?bash
справочную страницу. Короче говоря, это синтаксис для обработки конвейера как дескриптора файла.< <(...)
означает перенаправить ввод (первый<
) с выхода команды внутрь<(...)
. Аналогично,> >(...)
стандартный вывод передается на стандартный ввод внутри конвейера>(...)
. Вам не обязательно использовать перенаправление с заменой процесса.cat <( echo a b c )
работает так же.readarray
также можно читать со стандартного ввода, так чтоисточник