Відповідь Стівена Кітта охоплює те, що я спробую висвітлити, чому ця зміна була здійснена. По-перше, хтось зауважив, що ім'я файлу, що містить нові рядки 1, може призвести до неоднозначного виведення . Наприклад, розглянемо цей вихід:
d41d8cd98f00b204e9800998ecf8427e foo
25af89c92254a806b2e93fffd8ac1814 bar
Чи означає це, що було два файли foo
та bar
чи лише один файл, ім'я якого файлу "foo\n25af89c92254a806b2e93fffd8ac1814 bar"
? Звичайно, ця остання можливість є малоймовірною, але вона можлива. Щоб вирішити двозначність, розробники вирішили вийти з нових рядків із зворотною косою рисою ( \
). Потім результат стає помітним. Однак тоді є ще одна неоднозначність:
764efa883dda1e11db47671c4a3bbd9e foo\nbar
Чи містить ім'я цього файлу з нового рядка або зворотної косої межі , за яким слід n
? Щоб вирішити цю проблему, нам потрібно уникати зворотних нахилів, щоб останній випадок став:
764efa883dda1e11db47671c4a3bbd9e foo\\nbar
Нарешті, вони вирішили доповнити кожен вихідний рядок, який містить такі вхідні знаки, з \\
полегшенням для аналізатора виявити, чи було виконано проходження. Імовірно, це було зроблено для того, щоб дозволити парсерам обробляти висновки як з епізодуючих версій, так md5sum
і з невідбійних версій (non-GNU). Прапор також означає, що "дорогого" відключення не потрібно робити, коли це не потрібно. Ви можете бачити приклад цього розбору в дії md5sum.c
сам по собі (рядок 382 у пов'язаній версії).
1 Під новим рядком я маю на увазі персонажа, \n
який іноді також конкретно називають передавачем ліній або LF ; див md5sum.c
.
*sum
утиліти (того ж сімейства, якmd5sum
, e, gsha1sum
тощо) в GNU coreutils роблять те саме.