TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #323 1.08K
Использование readarray и mapfile для групповой обработки строк

Когда обрабатываем многострочный вывод - часто используем while read, но есть более быстрый способ: mapfile (синоним - readarray).

❓ Что делает mapfile? Читает строки из stdin или команды сразу в массив, построчно:


mapfile -t lines < input.txt
# теперь ${lines[0]}, ${lines[1]} и т.д. - отдельные строки


Аналог:


readarray -t lines < input.txt


Флаг -t удаляет \n на конце строк.

▪️ Обработка вывода команд:


mapfile -t users < <(cut -d: -f1 /etc/passwd)

for user in "${users[@]}"; do
echo "Пользователь: $user"
done


▪️ Фильтрация и трансформация. Комбинируем с grep, awk, sort, uniq:


mapfile -t services < <(systemctl list-units --type=service | awk '/running/ {print $1}')

for svc in "${services[@]}"; do
echo "Активный сервис: $svc"
done


▪️ Срезы и подмассивы. Работа с частями:


mapfile -t logs < <(tail -n 100 /var/log/syslog)

# последние 5 строк
printf '%s\n' "${logs[@]: -5}"


▪️ Использование с read-only входом:


some_func() {
local lines=()
mapfile -t lines
echo "Прочитано строк: ${#lines[@]}"
}

cat /etc/passwd | some_func


BashTex 📱 #bash #utils
  • 👍 8
More from @bash_tex
  1. Oct 9, 2026BashTex 📱 #мем
  2. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  3. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  4. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  5. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  6. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
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 →