为什么这两个不会返回相同的值,我怎么能让他们这样做?

时间:2017-05-05 17:31:29

标签: bash

我的桌面上有一个zip文件,大小为1440字节。以下是它的sha1。

openssl sha1 "$HOME/Desktop/file.zip"
> SHA1(/Users/loveborgstrom/Desktop/file.zip)= eaf08d01087617721555eeca9867b13e74c8e7df

长话短说,我需要将此文件存储在脚本中。为此,我将文件转换为base64。但是,当我尝试打印它失败。我注意到打印文件的sha1与原始文件不同。

我的问题是为什么这会使文件保持原样

cat "$HOME/Desktop/file.zip" | base64 | base64 -D | openssl sha1
> eaf08d01087617721555eeca9867b13e74c8e7df

但不是这个

a="$(cat "$HOME/Desktop/file.zip")"; echo -n "${a}" | base64 | base64 -D | openssl sha1
> ccc23bb28dd6ff27bcd4de7739c931f5870d06e7

如果我将这些文件中的每一个打印到文件中,则第一个文件在1440字节处完好无损并且可以提取。然而另一个只有1086字节...

我很困惑为什么有些内容会消失,并且想知道如何阻止这种情况发生。

1 个答案:

答案 0 :(得分:0)

推出bash变量标签有一些限制,使得处理二进制数据变得困难。然而zsh支持这一点。

有关详细信息,请参阅this