md5sum 末尾的奇怪符号

Strange symbols at the end of md5sum

我在 MacOSX 上安装了 md5sum

brew install md5sha1sum

当我尝试在终端上创建哈希时:

timestamp=$(date +%m%d%Y%H%M%S)
UUID="$(echo -n "$timestamp" | md5sum )"
echo $UUID

散列末尾有一些奇怪的 - 符号:

[输出]:

20e220c825391b96359a7093c33e9f18 -

为什么会这样?如何去除字符串拖尾符号?

我可以这样做:

timestamp=$(date +%m%d%Y%H%M%S)
UUID="$(echo "$timestamp" | md5sum | cut -d' ' -f1)"
echo $UUID

但是 post- 处理字符串是摆脱奇怪符号的唯一方法吗?

当您使用 md5sum 从标准输入(标准输入)计算 MD5 散列时,它输出 - 作为文件名。例如,

$ md5sum hello.c
ff585184df1b2b93e8e67058e1e708c4  hello.c
$ md5sum < hello.c
ff585184df1b2b93e8e67058e1e708c4  -

请注意,第二条命令从标准输入读取,而第一条命令直接从 hello.c

读取

如果您不需要文件名,您可以将输出通过管道传输到 awk - 如

$ md5sum < hello.c | awk '{print }'
ff585184df1b2b93e8e67058e1e708c4

或者,对于您的具体情况,

UUID="$(echo -n "$timestamp" | md5sum | awk '{print }')"

或者,

UUID="$(printf $timestamp | md5sum | awk '{print }')"

在 UNIX 领域,- 通常是一个占位符文件名,意思是 "standard input" 或 "standard output"。在这种情况下,它表示标准输入,因为您将数据通过管道传输到 md5sum.

也许可以使用 printf 而不是回显结果,并设置最大长度:

printf "%.32s\n" "$UUID"

因为 md5 总是 32 个字符长,使用格式字符串应该可行。