日付の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
cat
テキスト(たとえば、、、、cut
などsort
)を操作するように設計されたシェルユーティリティでは、入力はテキストファイルでtail
なければなりません。 Unixの用語で表現されたテキストファイル:
LC_CTYPE
ヌルバイトを除いて、環境のロケール(ロケール)で有効な文字のみを含めます。- 一連の行で構成され、各行は
\n
改行文字(改行文字とも呼ばれます)で終わります。
2番目の点は、空でないファイルが改行文字で終わることを意味します。
入力がテキストファイルではない場合はどうなりますか?ユーティリティによって異なります。以前のUnixシステムは、ヌルバイトの次の行のテキストを無視し、最後の不完全行(最後の改行文字の後のテキスト)の全部または一部を無視する傾向がありました。 GNUバージョンは常にヌルバイトをプレーン文字として扱い、ほとんどの場合、無効なバイトシーケンスを渡します。 GNUバージョンは、最後の改行文字が失われても常に入力全体を処理しますが、出力に末尾の改行文字を追加するかどうかは異なります。たとえば、GNUはcat
常に入力を変更せずに渡しますが、他の多くの場合(含む)はcut
常にすべての出力行(最後の行を含む)の末尾に改行文字を印刷します。
したがって、参照入力を生成するときは、最後の瞬間に末尾の改行を抑制する必要があります。
echo 03112016 | cut -d'.' -f4 | tr -d '\n' | sha256sum
そうでなければ
echo -n 03112016 | sha256sum