为什么这个字符串比较不起作用?

Why is this string comparation not working?

提问人:adrian n 提问时间:7/30/2023 最后编辑:Cyrusadrian n 更新时间:7/30/2023 访问量:40

问:

我试图将 md5 哈希值与保存在文件中的哈希值进行比较,结果是哈希值总是不合格的,即使它们相等:

#!/bin/bash

checksum=$(ls <FOLDER> | md5sum)
last_checksum=$(cat CHECKSUM)

if [ "$checksum" != "$last_checksum" ]; then
    echo -n $checksum > CHECKSUM
    echo CHECKSUMS ARE UNEQUAL
fi

打印两个校验和相等。

bash if-语句 比较 双引号

评论

0赞 Paul Pazderski 7/30/2023
if 语句之前添加一个可以帮助您找到差异。乍一看,这似乎是正确的。我也宁愿不在这里使用。当文本文件以换行符结尾时,它们往往会更好地工作。printf '%q\n' "$checksum" "$last_checksum"echo -n
1赞 Cyrus 7/30/2023
请将您的脚本粘贴到 shellcheck.net,并尝试实施其中提出的建议。
0赞 Cyrus 7/30/2023
请注意:为什么不解析 ls

答:

1赞 Ted Lyngmo 7/30/2023 #1

这是因为不保留哈希值和文件名之间的双倍空格,这意味着如果包含echo -n $checksum-$checksum

49a6b6e584f20a28509c1da3c311cda6  -

然后,将写入文件的内容将改为

49a6b6e584f20a28509c1da3c311cda6 -

引号将有助于预设原始字符串:

echo -n "$checksum" > CHECKSUM

您还可以删除校验和的文件名部分,因为这并不有趣:

checksum=$(ls . | md5sum | cut -d' ' -f1)

评论

0赞 adrian n 7/30/2023
这是有道理的,谢谢!
0赞 Ted Lyngmo 7/31/2023
@adriann 很高兴它帮了忙!