คำตอบของ Stephen Kitt ครอบคลุมถึงสิ่งที่และฉันจะพยายามอธิบายว่าทำไมการเปลี่ยนแปลงนี้จึงถูกนำไปใช้ ครั้งแรกที่มีคนตั้งข้อสังเกตว่าชื่อไฟล์ที่มีการขึ้นบรรทัดใหม่1อาจส่งผลให้การส่งออกที่ไม่ชัดเจน ตัวอย่างเช่นพิจารณาผลลัพธ์นี้:
d41d8cd98f00b204e9800998ecf8427e foo
25af89c92254a806b2e93fffd8ac1814 bar
นี้ไม่ได้หมายความว่ามีสองไฟล์fooและbarหรือเฉพาะไฟล์ที่มีชื่อไฟล์เป็น"foo\n25af89c92254a806b2e93fffd8ac1814 bar"? จริงอยู่ที่ความเป็นไปได้หลังนี้ไม่น่าจะสูง แต่เป็นไปได้ เพื่อแก้ไขความคลุมเครือนักพัฒนาเลือกที่จะหลบเลี่ยงการขึ้นบรรทัดใหม่ด้วยแบ็กสแลช ( \) จากนั้นผลลัพธ์จะกลายเป็นความแตกต่าง อย่างไรก็ตามมีความคลุมเครือเพิ่มเติม:
764efa883dda1e11db47671c4a3bbd9e foo\nbar
ชื่อไฟล์นี้มีการขึ้นบรรทัดใหม่หรือแบ็กสแลชตามด้วยnหรือไม่ ในการแก้ไขปัญหานี้เราจำเป็นต้องหลบหลีกแบ็กสแลชด้วยดังนั้นกรณีหลังจะกลายเป็น:
764efa883dda1e11db47671c4a3bbd9e foo\\nbar
ในที่สุดพวกเขาเลือกที่จะเพิ่มแต่ละบรรทัดเอาต์พุตที่มี escapes ดังกล่าวด้วย\\เพื่อให้ง่ายต่อการแยกวิเคราะห์เพื่อตรวจสอบว่าการหลบหนีได้ทำไปแล้วหรือไม่ สันนิษฐานว่าเป็นการกระทำเพื่ออนุญาตให้ตัวแยกวิเคราะห์จัดการเอาต์พุตทั้งจากรุ่นที่กำลังหนีmd5sumและจากรุ่นที่ไม่หนีหาย (ไม่ใช่ GNU) การตั้งค่าสถานะยังหมายความว่าไม่จำเป็นต้องยกเลิกการ "หนีค่าใช้จ่าย" เมื่อไม่จำเป็น คุณสามารถดูตัวอย่างของการแยกวิเคราะห์นี้ในmd5sum.cตัวมันเอง (บรรทัด 382 ในเวอร์ชันที่ลิงก์)
1โดยการขึ้นบรรทัดใหม่ฉันหมายถึงอักขระ\nที่บางครั้งเรียกว่าlinefeedหรือLF โดยเฉพาะ เห็นmd5sum.cไหม
*sumสาธารณูปโภคอื่น ๆ(ของตระกูลเดียวกันกับmd5sum, e, g,sha1sumฯลฯ ) ใน GNU coreutils ทำเช่นเดียวกัน