web-dev-qa-db-ja.com

なぜSHAが一致しないのですか?

スクリプトを作成しようとしていますが、日付のSHAを使用していますが、2つの異なる結果が得られており、一生の間、その理由を理解できません。

echo -n 03112016 | cut -d'.' -f4 | sha256sum | cut -d' ' -f 1
482c00f7db8419d9f9a151d54de301d73c8f688b2e3e91c485f369596543612e

date "+%m%d%Y" | tr -d '\n' | sha256sum | cut -d' ' -f 1
d373ab72ec7d92ee06ebba4748f78829cd62ce68f1ac600ae1767a272869b664

私はそれが私の側で愚かな何かでなければならないことを知っていますが、私は本当にどんな助けにも感謝します。

1
leigon

テキストを操作するように設計されたシェルユーティリティ(catcutsorttailなど)では、入力がテキストファイルである必要があります。 Unix用語でのテキストファイル:

  • アンビエントロケールの有効な文字のみで構成されます(LC_CTYPEロケール設定)、ヌルバイト以外;
  • 一連の行で構成され、各行は改行文字(\n、別名ラインフィード)。

この2番目のポイントは、空でないファイルはすべて改行文字で終わることを意味します。

入力がテキストファイルでない場合に何が起こるかは、ユーティリティによって異なります。古いUnixシステムは、ヌルバイトの後の行のテキストを無視し、最後の不完全な行(最後の改行文字の後のテキスト)の全部または一部を無視する傾向がありました。 GNUバージョンは常にnullバイトを通常の文字として扱い、ほとんどの場合無効なバイトシーケンスを通過します。GNUバージョンは、最後の改行が欠落している場合でも、常に入力全体を処理します。 、ただし、出力に末尾の改行を追加するかどうかは異なります。たとえば、GNU catは常に入力を変更せずに渡しますが、cut、最後の行を含む各出力行の最後に常に改行を出力します。

したがって、参照入力を生成するときは、最後の最後で末尾の改行を抑制する必要があります。

echo 03112016 | cut -d'.' -f4 | tr -d '\n' | sha256sum

あるいは単に

echo -n 03112016 | sha256sum