在 bash 脚本中,如何在命令中使用变量并分配给新变量?

在 bash 脚本中,如何在命令中使用变量并分配给新变量?

我正在尝试将一个变量的 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" | md5or md5 <<<"$backup_dir",但请注意,这会在值的末尾添加一个换行符,$backup_dir这会改变哈希值。

如果md5md5实用程序常见于 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")

相关内容