是否可以打印 SHA 总和而不将其-
附加到末尾?
$ echo test | sha1sum
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83 - <--- this "-" dash/hyphen
我知道我们可以使用awk
其他命令行工具,但是可以不使用其他工具来完成吗?
$ echo test | sha1sum | awk '{print $1}'
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83
答案1
由于 sha1sum 哈希值有 40 个字符长,因此您可以将输出通过管道传输到 head 命令中并从中提取前 40 个字符:
echo test | sha1sum | head -c 40
答案2
如果没有其他工具或没有编辑实际的 sha1sum 脚本/二进制文件,这是不可能的。当 sha1sum 被输入一个文件时,它会在总和后打印文件名。当 sha1sum 未提供文件或与管道一起使用时。它将 - 作为占位符来指示输入不是文件。
答案3
在 bash 中,没有额外的工具。
h=($(echo test | sha1sum )) ;echo $h
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83
或者
h=( `echo test | sha1sum` ) ;echo $h
在 bash 中,这使用 h 的“数组”声明来创建标记的多索引数组。使用 $h 索引数组再次引用变量与 ${h[0]} 相同
使用基本的 shell 替换
h=`echo test | sha1sum` ;echo ${h// */}
或 posix shell (sh, dash, bash) 删除后缀%
h=`echo test | sha1sum` ;echo ${h%-}
尽管使用数组是更直观的选择,但也可能会成功。
添加base64
xxd + base64 可用于增加可打印字符范围中的熵(减少位数)
h=($(echo test | sha1sum )) ;echo $h|xxd -r -p |base64
ThJDvSLGbnbCup7dwfkTlOV/n4M=
答案4
似乎很奇怪没有人提到这一点,但我发现使用“tr”命令修剪输出是最简单的。没有什么反对 bash/perl/python 正则表达式的,但如果不用谷歌搜索 5 分钟我永远无法得到它们。
$ echo -n "hello" | sha256sum | tr -d "\n *-"
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824