我正在尝试将一个变量的 MD5 存储到另一个变量中。在反引号和更现代的()
表示法之间,我无法弄清楚如何将通过命令运行的变量的值分配给另一个变量。示例代码:
#!/bin/bash
backup_dir=$(date +%Y-%m-%d_%H-%M-%S)
hashed=$( ${backup_dir} | md5)
在这里,hashed
变量不起作用,它接受文字字符串backup_dir
并对其进行哈希处理。所以哈希值总是相同的。有什么想法吗?
谢谢!
答案1
您期望md5
读取变量的值backup_dir
并返回其 MD5 哈希和。
命令管道
${backup_dir} | md5
$backup_dir
将尝试作为命令运行,将其输出通过管道传输到md5
.我预计会出现“命令未找到”错误,以及d41d8cd98f00b204e9800998ecf8427e
.$hashed
相反,您需要使用类似的东西
printf '%s' "$backup_dir" | md5
给出md5
其标准输入流上的值。
您也可以使用echo "$backup_dir" | md5
or md5 <<<"$backup_dir"
,但请注意,这会在值的末尾添加一个换行符,$backup_dir
这会改变哈希值。
如果md5
该md5
实用程序常见于 BSD 和类 BSD 系统(例如 macOS),那么您应该使用
md5 -q -s "$backup_dir"
该-s
选项采用一个字符串作为其参数,并-q
导致md5
仅打印出该字符串的哈希值,而不打印其他内容。
概括:
#!/bin/bash
backup_dir=$(date +%Y-%m-%d_%H-%M-%S)
hashed=$(md5 -q -s "$backup_dir")