Berikut ini membaca file yang diteruskan sebagai argumen baris demi baris:
while IFS= read -r line; do
echo "Text read from file: $line"
done < my_filename.txt
Ini adalah bentuk standar untuk membaca baris dari file dalam satu lingkaran. Penjelasan:
IFS=
(atau IFS=''
) mencegah spasi spasi awalan / jejak.
-r
mencegah backslash lolos dari ditafsirkan.
Atau Anda bisa memasukkannya ke skrip pembantu file bash, contoh konten:
#!/bin/bash
while IFS= read -r line; do
echo "Text read from file: $line"
done < "$1"
Jika di atas disimpan ke skrip dengan nama file readfile
, itu dapat dijalankan sebagai berikut:
chmod +x readfile
./readfile filename.txt
Jika file tersebut bukan file teks POSIX standar (= tidak diakhiri oleh karakter baris baru), loop dapat dimodifikasi untuk menangani trailing sebagian baris:
while IFS= read -r line || [[ -n "$line" ]]; do
echo "Text read from file: $line"
done < "$1"
Di sini, || [[ -n $line ]]
mencegah baris terakhir dari diabaikan jika tidak diakhiri dengan \n
(karena read
mengembalikan kode keluar non-nol ketika bertemu EOF).
Jika perintah-perintah di dalam loop juga membaca dari input standar, deskriptor file yang digunakan oleh read
bisa kebetulan ke yang lain (hindari deskriptor file standar ), misal:
while IFS= read -r -u3 line; do
echo "Text read from file: $line"
done 3< "$1"
(Kerang Non-Bash mungkin tidak tahu read -u3
; gunakan read <&3
saja.)