มันไม่เกี่ยวกับการเพิ่มบรรทัดใหม่ที่ส่วนท้ายของไฟล์มันเกี่ยวกับการไม่ลบบรรทัดใหม่ที่ควรมี
แฟ้มข้อความภายใต้ยูนิกซ์ประกอบด้วยชุดของเส้นแต่ละที่ลงท้ายด้วยตัวอักษรขึ้นบรรทัดใหม่ ( \n
) ไฟล์ที่ไม่ว่างเปล่าและไม่จบด้วยการขึ้นบรรทัดใหม่จึงไม่ใช่ไฟล์ข้อความ
ยูทิลิตี้ที่คาดว่าจะทำงานกับไฟล์ข้อความอาจไม่สามารถทำงานได้ดีกับไฟล์ที่ไม่ได้ขึ้นบรรทัดใหม่ ยูทิลิตี้ Unix เชิงประวัติอาจละเว้นข้อความหลังขึ้นบรรทัดใหม่ล่าสุดตัวอย่างเช่น โปรแกรมอรรถประโยชน์ของGNUมีนโยบายในการทำงานอย่างเหมาะสมกับไฟล์ที่ไม่ใช่ข้อความดังนั้นโปรแกรมอรรถประโยชน์ที่ทันสมัยอื่น ๆ ส่วนใหญ่จะทำเช่นนั้น แต่คุณยังอาจพบกับพฤติกรรมแปลก ๆ กับไฟล์ที่ไม่มีบรรทัดใหม่สุดท้าย
ด้วย GNU diff ถ้าไฟล์ใดไฟล์หนึ่งที่ถูกเปรียบเทียบจบลงด้วยการขึ้นบรรทัดใหม่ แต่ไม่ใช่ไฟล์อื่นมันควรระมัดระวังที่จะทราบข้อเท็จจริงนั้น เนื่องจาก diff เป็นแบบ line-oriented จึงไม่สามารถระบุสิ่งนี้ได้โดยการจัดเก็บ newline สำหรับไฟล์หนึ่งไฟล์ แต่ไม่ใช่สำหรับไฟล์อื่น - ขึ้นบรรทัดใหม่จำเป็นต้องระบุว่าแต่ละบรรทัดในไฟล์ diffเริ่มต้นและสิ้นสุดที่ใด ดังนั้น diff ใช้ข้อความพิเศษนี้\ No newline at end of file
เพื่อแยกความแตกต่างของไฟล์ที่ไม่ได้ลงท้ายด้วยการขึ้นบรรทัดใหม่จากไฟล์ที่ทำ
โดยวิธีการในบริบท C ไฟล์ต้นฉบับประกอบด้วยชุดของบรรทัด ยิ่งไปกว่านั้นหน่วยการแปลจะถูกดูในชุดการใช้งานซึ่งแต่ละชุดจะต้องลงท้ายด้วยอักขระขึ้นบรรทัดใหม่ ( n1256 §5.1.1.1) บนระบบ unix การแม็พนั้นง่าย บน DOS และ Windows แต่ละลำดับ CR LF ( \r\n
) จะถูกแมปกับ newline ( \n
นี่คือสิ่งที่เกิดขึ้นเสมอเมื่ออ่านไฟล์ที่เปิดเป็นข้อความบนระบบปฏิบัติการเหล่านี้) มี OSE สองสามตัวที่ไม่มีอักขระขึ้นบรรทัดใหม่ แต่มีเร็กคอร์ดขนาดคงที่หรือตัวแปรแทน บนระบบเหล่านี้การแมปจากไฟล์ไปยังแหล่ง C แนะนำ\n
ในตอนท้ายของแต่ละระเบียน แม้ว่าสิ่งนี้จะไม่เกี่ยวข้องโดยตรงกับยูนิกซ์ แต่ก็หมายความว่าหากคุณคัดลอกไฟล์ต้นฉบับ C ที่ไม่มีการขึ้นบรรทัดใหม่ขั้นสุดท้ายไปยังระบบที่มีไฟล์ข้อความแบบบันทึกจากนั้นก็คัดลอกกลับมาคุณจะจบลงด้วยความไม่สมบูรณ์ บรรทัดสุดท้ายจะถูกตัดทอนในการแปลงเริ่มต้นหรือขึ้นบรรทัดใหม่พิเศษที่ติดอยู่ระหว่างการแปลงย้อนกลับ
¹
ตัวอย่าง: ผลลัพธ์ของการจัดเรียง GNU จะจบลงด้วยการขึ้นบรรทัดใหม่เสมอ ดังนั้นถ้าไฟล์foo
หายไปขึ้นบรรทัดสุดท้ายของคุณจะพบว่ารายงานตัวละครตัวหนึ่งมากกว่า
sort foo | wc -c
cat foo | wc -c