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