Câu trả lời của Stephen Kitt bao gồm những gì và tôi sẽ cố gắng giải thích tại sao thay đổi này được thực hiện. Đầu tiên, ai đó quan sát thấy rằng một tên tệp chứa dòng mới 1 có thể dẫn đến đầu ra mơ hồ . Ví dụ, hãy xem xét đầu ra này:
d41d8cd98f00b204e9800998ecf8427e foo
25af89c92254a806b2e93fffd8ac1814 bar
Điều này có nghĩa là có hai tệp foo
và bar
chỉ một tệp có tên tệp là "foo\n25af89c92254a806b2e93fffd8ac1814 bar"
? Cấp, khả năng sau này là rất khó xảy ra, nhưng nó có thể. Để giải quyết sự mơ hồ, các nhà phát triển đã chọn thoát dòng mới bằng dấu gạch chéo ngược ( \
). Đầu ra sau đó trở nên phân biệt. Tuy nhiên, sau đó có một sự mơ hồ hơn nữa:
764efa883dda1e11db47671c4a3bbd9e foo\nbar
Tên của tệp này có chứa một dòng mới hoặc dấu gạch chéo ngược theo sau n
không? Để giải quyết vấn đề này, chúng ta cũng cần thoát dấu gạch chéo ngược để trường hợp sau trở thành:
764efa883dda1e11db47671c4a3bbd9e foo\\nbar
Cuối cùng, họ đã chọn để trả trước mỗi dòng đầu ra có chứa các lối thoát như vậy \\
để giúp trình phân tích cú pháp dễ dàng phát hiện xem việc thoát đã được thực hiện hay chưa. Có lẽ điều này đã được thực hiện để cho phép các trình phân tích cú pháp xử lý đầu ra cả từ các phiên bản thoát md5sum
và từ các phiên bản không thoát (không phải GNU). Cờ cũng có nghĩa là không thoát "tốn kém" không cần thiết phải thực hiện khi không cần thiết. Bản thân bạn có thể thấy một ví dụ về phân tích cú pháp này md5sum.c
(dòng 382 trong phiên bản được liên kết).
1 Theo dòng mới, ý tôi là nhân vật \n
đôi khi cũng được gọi cụ thể là linefeed hoặc LF ; thấy md5sum.c
.
*sum
tiện ích khác (cùng họmd5sum
, e, g,sha1sum
v.v.) trong lõi GNU cũng làm như vậy.