Die Antwort von @Cyrus ist genau auf den Punkt gebracht, wie dies gelöst werden kann - um dies zu erklären, wenn echo
verwendet wird Es wird ein Zeilenumbruch am Ende der Zeichenfolge ausgegeben. Wie Sie in dieser Online-Ausgabe sehen können, hello
mit einem Zeilenumbruch gibt genau das MD5 aus, das Sie zuvor erhalten haben. Mit -n
unterdrückt den Zeilenumbruch und liefert dann das erwartete Ergebnis.
Bearbeiten :
Sie können es deutlich sehen, wenn Sie es auf hexdump
ausgeben , die den Hexadezimalwert der dortigen Bytes anzeigt.
$ echo "str_example" | hd
00000000 73 74 72 5f 65 78 61 6d 70 6c 65 0a |str_example.|
Siehe 0a
(\n
) am Ende der Zeichenfolge
$ echo -n "str_example" | hd
00000000 73 74 72 5f 65 78 61 6d 70 6c 65 |str_example|
Mit -n
echo fügt keine neue Zeile ein (\n
) am Ende
Jetzt mit leerem String
$ echo "" | hd
00000000 0a |.|
Nur das Neue-Zeile-Zeichen
$ echo -n "" | hd
Leerer String, also hexdump
zeigt keine Ausgabe
Standardmäßig echo
enthält ein Zeilenumbruchzeichen am Ende der Ausgabe. PHP und die von Ihnen verwendeten Online-Sites enthalten jedoch keinen Zeilenumbruch. Um das Zeilenumbruchzeichen zu unterdrücken, verwenden Sie den -n
Flagge:
echo -n "hello" | md5sum
Ausgabe:
5d41402abc4b2a76b9719d911017c592 -
Siehe:help echo
oder mit printf:
printf "%s" "hello" | md5sum