Odpověď @Cyrus je přesně na místě, jak to vyřešit - pro vysvětlení při použití echo
na konci řetězce vypíše nový řádek. Jak můžete vidět na tomto online výstupu, hello
s novým řádkem vydává přesně ten MD5, který jste dostávali dříve. Pomocí -n
potlačí nový řádek a pak vám dá výsledek, který jste očekávali.
Upravit :
Můžete to jasně vidět, pokud to odešlete do hexdump
, který ukazuje šestnáctkové číslo bajtů v něm.
$ echo "str_example" | hd
00000000 73 74 72 5f 65 78 61 6d 70 6c 65 0a |str_example.|
Viz 0a
(\n
) na konci řetězce
$ echo -n "str_example" | hd
00000000 73 74 72 5f 65 78 61 6d 70 6c 65 |str_example|
S -n
echo nevkládá nový řádek (\n
) nakonec
Nyní s prázdným řetězcem
$ echo "" | hd
00000000 0a |.|
Pouze znak Nový řádek
$ echo -n "" | hd
Prázdný řetězec, tedy hexdump
neukazuje žádný výstup
Ve výchozím nastavení echo
obsahuje znak nového řádku na konci výstupu. PHP a online stránky, které jste použili, však nový řádek neobsahují. Chcete-li potlačit znak nového řádku, použijte -n
příznak:
echo -n "hello" | md5sum
Výstup:
5d41402abc4b2a76b9719d911017c592 -
Viz:help echo
nebo pomocí printf:
printf "%s" "hello" | md5sum