Далі читається файл, переданий як аргумент за рядком:
while IFS= read -r line; do
echo "Text read from file: $line"
done < my_filename.txt
Це стандартна форма для читання рядків з файлу в циклі. Пояснення:
IFS=(або IFS='') запобігає обробці пробілу / заднім пробілом.
-r запобігає інтерпретації втечі зворотнього косого кута.
Або ви можете помістити його в допоміжний скрипт файлу bash, наприклад, вміст:
#!/bin/bash
while IFS= read -r line; do
echo "Text read from file: $line"
done < "$1"
Якщо вищезазначене збережено у сценарії з назвою файлу readfile, його можна виконати наступним чином:
chmod +x readfile
./readfile filename.txt
Якщо файл не є стандартним текстовим файлом POSIX (= не закінчується символом нового рядка), цикл може бути модифікований, щоб обробляти тривалі часткові рядки:
while IFS= read -r line || [[ -n "$line" ]]; do
echo "Text read from file: $line"
done < "$1"
Ось || [[ -n $line ]] запобігає ігноруванню останнього рядка, якщо він не закінчується символом \n(оскільки readповертає ненульовий код виходу, коли він стикається з EOF).
Якщо команди, що знаходяться в циклі, також читаються зі стандартного введення, дескриптор файлу, який використовується, readможна змінити на щось інше (уникайте стандартних дескрипторів файлів ), наприклад:
while IFS= read -r -u3 line; do
echo "Text read from file: $line"
done 3< "$1"
(Оболонки, що не мають башів, можуть не знати read -u3; використовуйте read <&3замість цього.)