Ini bukan tentang menambahkan baris baru ekstra di akhir file, ini tentang tidak menghapus baris baru yang seharusnya ada di sana.
Sebuah file teks , di bawah unix, terdiri dari serangkaian garis , yang masing-masing berakhir dengan karakter baris baru ( \n
). Karena itu file yang tidak kosong dan tidak diakhiri dengan baris baru bukanlah file teks.
Utilitas yang seharusnya beroperasi pada file teks mungkin tidak dapat mengatasi dengan baik file yang tidak berakhir dengan baris baru; Utilitas historis Unix mungkin mengabaikan teks setelah baris baru terakhir, misalnya. Utilitas GNU memiliki kebijakan berperilaku sopan dengan file non-teks, dan begitu juga sebagian besar utilitas modern lainnya, tetapi Anda mungkin masih menemukan perilaku aneh dengan file yang kehilangan baris baru akhir¹.
Dengan GNU diff, jika salah satu file yang dibandingkan diakhiri dengan baris baru tetapi tidak yang lain, perlu diperhatikan fakta itu. Karena diff berorientasi garis, ia tidak dapat menunjukkan ini dengan menyimpan baris baru untuk salah satu file tetapi tidak untuk yang lain - baris baru diperlukan untuk menunjukkan di mana setiap baris dalam file diff mulai dan berakhir. Jadi diff menggunakan teks khusus ini \ No newline at end of file
untuk membedakan file yang tidak berakhir pada baris baru dari file yang melakukannya.
Omong-omong, dalam konteks C, file sumber juga terdiri dari serangkaian baris. Lebih tepatnya, unit terjemahan dilihat dalam implementasi-didefinisikan sebagai serangkaian garis, yang masing-masing harus diakhiri dengan karakter baris baru ( n1256 §5.1.1.1). Pada sistem unix, pemetaannya mudah. Pada DOS dan Windows, setiap urutan CR LF ( \r\n
) dipetakan ke baris baru ( \n
; inilah yang selalu terjadi ketika membaca file yang dibuka sebagai teks pada OS ini). Ada beberapa OS di luar sana yang tidak memiliki karakter baris baru, tetapi sebaliknya memiliki catatan berukuran tetap atau variabel; pada sistem ini, pemetaan dari file ke sumber C memperkenalkan a\n
di akhir setiap rekaman. Meskipun ini tidak secara langsung relevan dengan unix, itu berarti bahwa jika Anda menyalin file sumber C yang kehilangan baris terakhir terakhirnya ke sistem dengan file teks berbasis catatan, lalu menyalinnya kembali, Anda akan berakhir dengan yang tidak lengkap baris terakhir terpotong di konversi awal, atau baris baru tambahan ditempelkan selama konversi terbalik.
¹
Contoh: output dari jenis GNU selalu diakhiri dengan baris baru. Jadi, jika file foo
tersebut kehilangan baris terakhirnya, Anda akan menemukan bahwa sort foo | wc -c
laporan memiliki satu karakter lebih banyak daripada cat foo | wc -c
.