La réponse de Stephen Kitt couvre le quoi et j'essaierai de comprendre pourquoi ce changement a été mis en œuvre. Tout d'abord, quelqu'un a observé qu'un nom de fichier contenant des sauts de ligne 1 pouvait entraîner une sortie ambiguë . Par exemple, considérez cette sortie:
d41d8cd98f00b204e9800998ecf8427e foo
25af89c92254a806b2e93fffd8ac1814 bar
Est-ce à dire qu'il y avait deux fichiers fooet / barou un seul fichier dont le nom est "foo\n25af89c92254a806b2e93fffd8ac1814 bar"? Certes, cette dernière possibilité est hautement improbable, mais elle est possible. Pour résoudre l'ambiguïté, les développeurs ont choisi d'échapper aux nouvelles lignes avec une barre oblique inverse ( \). La sortie devient alors reconnaissable. Cependant, il y a encore une ambiguïté:
764efa883dda1e11db47671c4a3bbd9e foo\nbar
Le nom de ce fichier contient-il une nouvelle ligne ou une barre oblique inverse suivie d'un n? Pour résoudre ce problème, nous devons également échapper aux barres obliques inverses, afin que ce dernier cas devienne:
764efa883dda1e11db47671c4a3bbd9e foo\\nbar
Enfin, ils ont choisi de faire précéder chaque ligne de sortie qui contient ces échappements d'un \\afin de permettre à un analyseur de détecter facilement si l'échappement a été effectué. Vraisemblablement, cela a été fait pour permettre aux analyseurs de gérer la sortie à la fois des versions d'échappement md5sumet des versions non d'échappement (non GNU). Le drapeau signifie également qu'il n'est pas nécessaire de procéder à un échappement «coûteux» lorsqu'il n'est pas nécessaire. Vous pouvez voir un exemple de cette analyse en action en md5sum.csoi (ligne 382 dans la version liée).
1 Par saut de ligne, j'entends le caractère \nqui est parfois aussi spécifiquement appelé saut de ligne ou LF ; voir md5sum.c.
*sumutilitaires (de la même famille quemd5sum, e, g,sha1sumetc.) dans GNU coreutils font de même.