@Cyrusの答えは、これを解決する方法と正確に一致しています-説明するには、 echo を使用する場合 文字列の最後に改行を出力します。このオンライン出力でわかるように、 hello 改行を使用すると、以前に取得していた MD5 が正確に出力されます。 -n の使用 改行を抑制し、期待どおりの結果が得られます。

編集 :
hexdump まで出力するとよくわかります 、そこにあるバイトの 16 進数を示します。
$ echo "str_example" | hd
00000000 73 74 72 5f 65 78 61 6d 70 6c 65 0a |str_example.|
0a を参照してください (\n ) 文字列の最後
$ echo -n "str_example" | hd
00000000 73 74 72 5f 65 78 61 6d 70 6c 65 |str_example|
-n で echo は改行を入れません (\n )最後に
空の文字列を使用
$ echo "" | hd
00000000 0a |.|
改行文字のみ
$ echo -n "" | hd
空の文字列なので hexdump 出力がありません
デフォルトでは、echo 出力の最後に改行文字が含まれます。ただし、使用した PHP とオンライン サイトには改行が含まれていません。改行文字を抑制するには、-n を使用します フラグ:
echo -n "hello" | md5sum
出力:
5d41402abc4b2a76b9719d911017c592 -
参照:help echo
または printf:
printf "%s" "hello" | md5sum