Несоответствия в контрольных суммах MD5

Несоответствия в контрольных суммах MD5

Я пытаюсь получить md5-хэш строки. Указанная строка состоит только из заглавных и строчных букв и цифр. Никаких других символов, включая пробелы и переводы строк. Строка вводится с клавиатуры, а не через файл ввода, поэтому BOM или другие флаги отсутствуют.

Если я запускаю локально, md5sumя получаю следующий вывод:

ubuntu@ubuntu:~$ echo word | md5sum 
a46ec67a0f2e7c387926ac5d783ea4b8 - 

ubuntu@ubuntu:~$ echo "word" | md5sum
a46ec67a0f2e7c387926ac5d783ea4b8  - 

ubuntu@ubuntu:~$ echo "word" -n | md5sum
3a21ca21563e9535a9012daef61a0bdf  -

Я знаю разницу между 2-м и 3-м выводами вышеиз-за отсутствия символа новой строки( -n).Эта часть мне ясна.. (Оказалось, что это не так! Смотрите принятый ответ.)

Однако есть инструменты, которые дают третий результат. Все не-CLI инструменты, похоже, даютодинаковыйрезультат, и вот что меня смущает:

Что тут происходит?

решение1

$ echo "word" -n | md5sum
3a21ca21563e9535a9012daef61a0bdf  -
$ echo "word -n" | md5sum
3a21ca21563e9535a9012daef61a0bdf  -
$ echo "-n" word | md5sum
c47d187067c6cf953245f128b5fde62a  -

В частности, обратите внимание, что:

$ echo "word" -n
word -n

Все опции должны располагаться перед аргументами, не являющимися опциями. Это имеет место в большинстве программ, за исключением некоторых утилит GNU, и во всех реализациях echo( echoоднако является особенным в том, что большинство строк, начинающихся с , -интерпретируются как аргументы, только несколько опций распознаются как таковые).

Связанный контент