TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #478 1.02K
Чтение файлов построчно без потери спецсимволов

Чтение файла строка за строкой в bash кажется простым… пока не начинают теряться символы.

▪️ Классическая ошибка


while read line; do
echo "$line"
done < file.txt


Проблемы:

\ - пропадает
начальные/конечные пробелы обрезаются
строки с \n, \t, \\ читаются некорректно

Для конфигов, путей и логов это критично.

▪️ Правильный способ


while IFS= read -r line; do
echo "$line"
done < file.txt


Это канонический вариант чтения строк.

▪️ Что здесь происходит

IFS=

отключает разделение по пробелам и табам;
сохраняет все пробелы в начале и конце строки.

read -r

запрещает интерпретацию \ как escape;
строка читается как есть.

▪️ Пример проблемы

Файл:


path=C:\Program Files\App\


Без -r:


path=C:Program FilesApp


С IFS= read -r:


path=C:\Program Files\App\


▪️ Чтение с обработкой строк


while IFS= read -r line; do
[[ "$line" =~ ^#|^$ ]] && continue
echo "Обработка: $line"
done < config.conf


▪️ Альтернатива: mapfile


mapfile -t lines < file.txt


Но есть один минус - mapfile загружает весь файл в память

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