MD5チェックサムの不一致

MD5チェックサムの不一致

文字列の md5 ハッシュを取得しようとしています。この文字列は、大文字と小文字、および数字のみで構成されています。スペースや改行を含むその他の文字は含まれていません。文字列はファイル入力ではなくキーボードから入力されるため、BOM やその他のフラグは存在しません。

ローカルで実行すると、md5sum次の出力が得られます。

ubuntu@ubuntu:~$ echo word | md5sum 
a46ec67a0f2e7c387926ac5d783ea4b8 - 

ubuntu@ubuntu:~$ echo "word" | md5sum
a46ec67a0f2e7c387926ac5d783ea4b8  - 

ubuntu@ubuntu:~$ echo "word" -n | md5sum
3a21ca21563e9535a9012daef61a0bdf  -

上記の2番目と3番目の出力の違いはわかっています改行文字がないために-n)。この部分は私には明らかです(そうではありませんでした!受け入れられた回答を参照してください。)

しかし、3番目の結果を出すツールもあります。CLI以外のツールはすべて、同じ結果、それが私を混乱させるのです:

何が起きてる?

答え1

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

具体的には、次の点に注意してください。

$ echo "word" -n
word -n

すべてのオプションは、非オプション引数の前に来なければなりません。これは、一部の GNU ユーティリティを除くほとんどのプログラムに当てはまり、 のすべての実装に当てはまりますecho(echoただし、 で始まるほとんどの文字列は-引数として解釈されますが、そのように認識されるオプションはごくわずかです)。

関連情報