Jawaban Stephen Kitt mencakup apa dan saya akan mencoba membahas mengapa perubahan ini diterapkan. Pertama, seseorang mengamati bahwa nama file yang mengandung baris baru 1 dapat menghasilkan output yang ambigu . Sebagai contoh, pertimbangkan output ini:
d41d8cd98f00b204e9800998ecf8427e foo
25af89c92254a806b2e93fffd8ac1814 bar
Apakah ini berarti ada dua file foodan bar, atau hanya satu file yang memiliki nama file "foo\n25af89c92254a806b2e93fffd8ac1814 bar"? Memang, kemungkinan yang terakhir ini sangat tidak mungkin, tetapi itu mungkin. Untuk mengatasi ambiguitas, pengembang memilih untuk keluar dari baris baru dengan backslash ( \). Output kemudian menjadi dapat dibedakan. Namun, kemudian ada ambiguitas lebih lanjut:
764efa883dda1e11db47671c4a3bbd9e foo\nbar
Apakah nama file ini mengandung baris baru, atau garis miring terbalik diikuti oleh n? Untuk mengatasi ini, kita juga harus melarikan diri dari garis miring terbalik, sehingga kasus terakhir menjadi:
764efa883dda1e11db47671c4a3bbd9e foo\\nbar
Akhirnya, mereka memilih untuk mendahului setiap jalur keluaran yang berisi pelarian seperti itu dengan a \\untuk memudahkan pengurai mendeteksi apakah pelolosan telah dilakukan. Agaknya hal ini dilakukan untuk memungkinkan parser menangani keluaran baik dari versi yang lolos md5sumdan dari versi yang tidak lolos (non-GNU). Bendera juga berarti bahwa "mahal" un-melarikan diri tidak perlu dilakukan ketika tidak perlu. Anda dapat melihat contoh tindakan parsing ini md5sum.csendiri (baris 382 dalam versi tertaut).
1 Dengan baris baru yang saya maksud adalah karakter \nyang kadang-kadang juga secara khusus disebut sebagai linefeed atau LF ; lihat md5sum.c.
*sumutilitas lain (dari keluarga yang sama denganmd5sum, e, g,sha1sumdll.) Di GNU coreutils melakukan hal yang sama.