La respuesta de @Cyrus está exactamente en el punto de cómo resolver esto:para explicar, cuando se usa echo
generará una nueva línea al final de la cadena. Como puede ver en este resultado en línea, hello
con una nueva línea genera exactamente el MD5 que estaba obteniendo anteriormente. Usando -n
suprime la nueva línea y luego le dará el resultado que esperaba.
Editar :
Puede verlo claramente si lo envía a hexdump
, que muestra el hexadecimal de los bytes allí.
$ echo "str_example" | hd
00000000 73 74 72 5f 65 78 61 6d 70 6c 65 0a |str_example.|
Ver el 0a
(\n
) al final de la cadena
$ echo -n "str_example" | hd
00000000 73 74 72 5f 65 78 61 6d 70 6c 65 |str_example|
Con -n
echo no pone una nueva línea (\n
) al final
Ahora con una cadena vacía
$ echo "" | hd
00000000 0a |.|
Solo el carácter de nueva línea
$ echo -n "" | hd
Cadena vacía, entonces hexdump
no muestra ninguna salida
Por defecto, echo
incluye un carácter de nueva línea al final de la salida. Sin embargo, PHP y los sitios en línea que usó no incluyen la nueva línea. Para suprimir el carácter de nueva línea, use el -n
bandera:
echo -n "hello" | md5sum
Salida:
5d41402abc4b2a76b9719d911017c592 -
Ver:help echo
o con printf:
printf "%s" "hello" | md5sum