2

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

Если я запускаю локально, используя 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 ответ1

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

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

$ echo "word" -n
word -n

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .