Stephen Kitt'in cevabı neyi kapsıyor ve bu değişikliğin neden uygulandığını anlatmaya çalışacağım . İlk olarak, birisi yeni satır 1 içeren bir dosya adının sonuçlanabileceğini gözlemledi . belirsiz bir çıktıya . Örneğin, bu çıktıyı göz önünde bulundurun:
d41d8cd98f00b204e9800998ecf8427e foo
25af89c92254a806b2e93fffd8ac1814 bar
İki dosya Bunun anlamı vardı mı foo
ve bar
ya kimin dosya adı sadece bir dosya"foo\n25af89c92254a806b2e93fffd8ac1814 bar"
? Verilmiş, bu ikinci olasılık oldukça düşüktür, ancak mümkündür. Belirsizliği gidermek için geliştiriciler ters eğik çizgi ile yeni çizgilerden kaçmayı seçti ( \
). Çıktı daha sonra ayırt edilebilir hale gelir. Ancak, o zaman başka bir belirsizlik var:
764efa883dda1e11db47671c4a3bbd9e foo\nbar
Bu dosyanın adı yeni bir satır mı yoksa arkasından n
mu? Bunu çözmek için ters eğik çizgiden de çıkmamız gerekir, böylece ikinci durum şöyle olur:
764efa883dda1e11db47671c4a3bbd9e foo\\nbar
Son olarak, \\
bir çözümleyicinin kaçmanın yapılıp yapılmadığını tespit etmesini kolaylaştıracak bir kaçış içeren her bir çıktı hattını hazırlamayı seçtiler . Muhtemelen bu, ayrıştırıcıların hem kaçan sürümlerden hem de kaçan md5sum
olmayan sürümlerden (GNU dışı) çıkan çıktıları işlemesine izin vermek için yapıldı . Bayrak ayrıca, "maliyetli" kaçmanın, gerekli olmadığında yapılması gerekmediği anlamına gelir. Bu ayrıştırma işleminin md5sum.c
kendi içinde bir eylem olduğunu görebilirsiniz (bağlı sürümde satır 382).
1 ile yeni satır bir karakter anlamına \n
bazen özel olarak da ifade edilir satır besleme veya LF ; bkz md5sum.c
.
*sum
olarakmd5sum
,sha1sum
GNU coreutils içindeki diğer programlar ( e, g, vb. İle aynı aileden ) aynı şeyi yapar.