打印末尾没有“-”的 SHA 和?

use*_*067 14 command-line hashsum checksum command sha1sum

是否可以在没有-附加到末尾的情况下打印 SHA 总和?

$ echo test | sha1sum 
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83  -  <--- this "-" dash/hyphen
Run Code Online (Sandbox Code Playgroud)

我知道我们可以使用awk和其他命令行工具,但是可以不使用其他工具来完成吗?

$ echo test | sha1sum | awk '{print $1}'
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83
Run Code Online (Sandbox Code Playgroud)

小智 9

由于 sha1sum 散列长度为 40 个字符,因此您可以将输出通过管道传输到 head 命令并从中提取前 40 个字符:

echo test | sha1sum | head -c 40
Run Code Online (Sandbox Code Playgroud)

来源:https : //stackoverflow.com/a/14992739/4642023

  • 或者,您可以使用“echo test |”来剪切空间。sha1sum | 切-f 1 -d“”`。结果相同,但您不必计算字符数。 (5认同)

Mic*_*pec 5

如果没有其他工具或没有编辑实际的 sha1sum 脚本/二进制文件,这是不可能的。当 sha1sum 被提供一个文件时,它会在总和之后打印文件名。当 sha1sum 未提供文件或与管道一起使用时。它将 - 放在那里作为占位符,以指示输入不是文件。

  • `-` 实际上代表 `stdin`。来自 `man md5sum` *如果没有 FILE,或者当 FILE 为 - 时,读取标准输入。* (5认同)

Jam*_*rup 5

在 bash 中,没有额外的工具。

h=($(echo test | sha1sum )) ;echo $h 

4e1243bd22c66e76c2ba9eddc1f91394e57f9f83
Run Code Online (Sandbox Code Playgroud)

或者

 h=( `echo test | sha1sum` ) ;echo $h 
Run Code Online (Sandbox Code Playgroud)

在 bash 中,它使用 h 的“数组”声明创建一个多索引的令牌数组。使用 $h 再次引用变量,索引数组与 ${h[0]} 相同

使用基本的外壳替换

 h=`echo test | sha1sum` ;echo ${h// */} 
Run Code Online (Sandbox Code Playgroud)

或 posix shell (sh, dash, bash) 删除后缀 %

h=`echo test | sha1sum` ;echo ${h%-}
Run Code Online (Sandbox Code Playgroud)

尽管使用数组是更直观的选择,但也可能会成功。

添加 base64

xxd + base64 可用于增加可打印字符范围的熵(减少位数)

 h=($(echo test | sha1sum )) ;echo $h|xxd -r -p |base64
ThJDvSLGbnbCup7dwfkTlOV/n4M=
Run Code Online (Sandbox Code Playgroud)