Shell-Script
為什麼 SHA 不匹配?
我正在嘗試編寫一個腳本,它使用日期的 SHA,但我得到了兩個不同的結果,而且我一生都無法弄清楚為什麼。
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
我知道這對我來說一定是愚蠢的,但我非常感謝任何幫助。
旨在對文本(例如
cat
、cut
、sort
、tail
等)進行操作的 Shell 實用程序要求其輸入為文本文件。一個文本文件,在 Unix 術語中:
- 僅包含環境語言環境(語言環境設置)中的有效字元
LC_CTYPE
,而不是空字節;- 由一系列行組成,每行都以換行符(
\n
,也稱為換行符)終止。第二點意味著任何非空文件都以換行符結尾。
如果輸入不是文本文件會發生什麼取決於實用程序。舊的 Unix 系統傾向於忽略空字節後一行的文本,並忽略最後一個不完整行的全部或部分內容(最後一個換行符後的文本)。GNU 版本總是將空字節視為普通字元,並且大多通過無效字節序列。即使最後的換行符失去,GNU 版本也總是處理整個輸入,但它們在是否在輸出中添加尾隨換行符方面有所不同。例如,GNU
cat
總是將其輸入原封不動地傳遞,但許多其他的,包括cut
,總是在每個輸出行的末尾列印一個換行符,包括最後一個。因此,當您生成參考輸入時,您需要在最後一分鐘取消尾隨換行符。
echo 03112016 | cut -d'.' -f4 | tr -d '\n' | sha256sum
要不就
echo -n 03112016 | sha256sum