提问人:adrian n 提问时间:7/30/2023 最后编辑:Cyrusadrian n 更新时间:7/30/2023 访问量:40
为什么这个字符串比较不起作用?
Why is this string comparation not working?
问:
我试图将 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
打印两个校验和相等。
答:
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 很高兴它帮了忙!
评论
printf '%q\n' "$checksum" "$last_checksum"
echo -n
ls
?