我使用md5sum为文件生成哈希值。 但我只需要接收哈希值,而不是文件名。
md5=`md5sum ${my_iso_file}`
echo ${md5}
输出:
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
我如何“剥离”文件名,只保留值?
我使用md5sum为文件生成哈希值。 但我只需要接收哈希值,而不是文件名。
md5=`md5sum ${my_iso_file}`
echo ${md5}
输出:
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
我如何“剥离”文件名,只保留值?
当前回答
md5=$(md5sum < index.html | head -c -4)
其他回答
一个简单的数组赋值工作…请注意,Bash数组的第一个元素可以仅用名称寻址,而不带[0]索引,即$md5只包含md5sum的32个字符。
md5=($(md5sum file))
echo $md5
# 53c8fdfcbb60cf8e1a1ee90601cc8fe2
另一种方法是:
md5sum filename | cut -f 1 -d " "
Cut将行分割为每个空格,只返回第一个字段。
md5=$(md5sum < index.html | head -c -4)
一个方法:
set -- $(md5sum $file)
md5=$1
另一种方法:
md5=$(md5sum $file | while read sum file; do echo $sum; done)
另一种方法:
md5=$(set -- $(md5sum $file); echo $1)
(不要尝试用反斜杠,除非你非常勇敢并且非常擅长反斜杠。)
这些解决方案相对于其他解决方案的优点是,它们只调用md5sum和shell,而不调用其他程序,如awk或sed。那么,这是否真的重要就另当别论了;你可能很难注意到其中的区别。
另一种方法:
md5=$(md5sum ${my_iso_file} | sed '/ .*//' )