Utknąłem z dziwnym zachowaniem readarray
dowodzenia.
Te man bash
stany:
readarray
Read lines from the standard input into the indexed array variable array
ale te skrypty nie działają (tablica jest pusta):
unset arr; (echo a; echo b; echo c) | readarray arr; echo ${#arr[@]}
unset arr; cat /etc/passwd | readarray arr; echo ${#arr[@]}
A te działają:
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[@]}
Co złego dzieje się z fajką?
< <
2 strzały?bash
stronę manuala. Krótko mówiąc, jest to składnia do traktowania potoku jako deskryptora pliku.< <(...)
oznacza przekierowanie wejścia (pierwszego<
) z wyjścia polecenia wewnątrz<(...)
. Podobnie,> >(...)
przekaże standardowe wyjście do standardowego wejścia rurociągu wewnątrz>(...)
. Niekoniecznie musisz używać przekierowania z substytucją procesu.cat <( echo a b c )
działa również.readarray
można również czytać ze standardowego wejścia, więc:źródło