TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #608 523
readarray: читаем вывод команды в массив без циклов

Часто в Bash список файлов или строк читают через while read. Но если нужно просто получить все данные в массив, есть более короткий и быстрый способ - readarray (или его синоним mapfile).

▪️Классический подход

files=()

while IFS= read -r file; do
files+=("$file")
done < <(find /var/log -name "*.log")


Работает, но код получается довольно громоздким.

▪️То же самое через readarray

readarray -t files < <(
find /var/log -name "*.log"
)


Теперь весь вывод команды сразу окажется в массиве files.

▪️Что делает ключ -t

Без него каждый элемент массива будет содержать символ новой строки (\n) в конце.

Практически всегда стоит использовать:

readarray -t lines < file.txt


Так строки попадут в массив уже без лишних символов.

▪️Работа с массивом

Например, узнать количество найденных файлов:

echo "${#files[@]}"


Или пройтись по ним:

for file in "${files[@]}"; do
echo "$file"
done


▪️Когда использовать не стоит

readarray считывает весь поток целиком. Если команда выводит миллионы строк или очень большой файл, массив займёт соответствующий объём памяти.
В таких случаях потоковая обработка через while read остаётся более подходящим вариантом.

▪️Почему это важно

Во многих скриптах while read используется просто по привычке. Если задача - получить список строк для дальнейшей работы, readarray делает то же самое в одну команду, сохраняя код компактным и избавляя от ручного заполнения массива.

BashTex 📱 #bash #linux
  • 👍 7
More from @bash_tex
  1. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  2. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  3. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  4. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  5. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
  6. Sep 30, 2026DEBUG trap - как Bash выполняет код перед каждой командой В Bash есть специальный DEBUG tr…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →