Przejdź do głównej zawartości

readarray


  • readarray – builtin w Bash służący do odczytywania całego wejścia (lub określonej liczby linii) i zapisywania ich jako elementy tablicy.
  • Alias mapfile – obie nazwy działają identycznie.
  • Zastosowania: szybkie wczytywanie plików, wyników poleceń, przetwarzanie wejścia bez pisania pętli while read.

Okno terminala
readarray [opcje] nazwa_tablicy
  • Domyślnie czyta ze standardowego wejścia.
  • Każda linia wejścia trafia do kolejnego elementu tablicy, zachowując znak nowej linii (chyba że użyto -t).

ParametrOpis
-n <liczba>Wczytaj maksymalnie <liczba> linii.
-O <indeks>Zacznij zapisywanie od podanego indeksu tablicy.
-s <liczba>Pomiń podaną liczbę pierwszych linii wejścia.
-tUsuń końcowe znaki nowej linii z każdej linii.
-u <fd>Czytaj z określonego deskryptora pliku.
-C <callback>Wykonuj funkcję callback po wczytaniu bloku linii (określa -c).
-c <liczba>Liczba linii w bloku przekazywanym do callbacka.

Okno terminala
# 1) Wczytanie całego pliku do tablicy
readarray linie < plik.txt
echo "Pierwsza linia: ${linie[0]}"
Okno terminala
# 2) Wczytanie pliku bez znaków nowej linii
readarray -t linie < plik.txt
Okno terminala
# 3) Wczytanie wyniku polecenia do tablicy
readarray -t pliki < <(ls -1 /etc)
Okno terminala
# 4) Wczytanie z pominięciem pierwszych 2 linii
readarray -t -s 2 dane < plik.csv
Okno terminala
# 5) Wczytanie z offsetem – dopisywanie do istniejącej tablicy
readarray -t -O ${#tab[@]} tab < nowy.txt

  • Tylko Bash: readarray i mapfile dostępne od Bash 4.0.
  • Nowe linie: Domyślnie zachowuje \n – użyj -t, jeśli chcesz je usunąć.
  • Wydajność: Szybsze niż pętla while read, bo działa w C wbudowanym w Bash.
  • EOF: Kończy odczyt po EOF lub po osiągnięciu limitu linii.
  • Callback: Opcje -C i -c przydają się przy przetwarzaniu dużych plików w blokach.

Błąd / KomunikatPrzyczynaRozwiązanie
bash: readarray: command not foundUżywasz powłoki innej niż Bash lub wersji <4.0Uruchom Bash 4+ lub użyj pętli while read.
Znak nowej linii w elementach tablicyDomyślne zachowanie readarrayUżyj opcji -t, by go usunąć.
Wczytanie pustych linii na początkuPlik zaczyna się pustymi liniamiUżyj -s, by je pominąć.