如何根据 Bash 中的字符串获取"random"数字?



我知道有很多随机数生成器,但我正在寻找更可预测的东西。有没有一种方法可以在给定字符串的情况下获得一个"随机"数(在每个实例中都是相同的(?我想在bash做这个。我正在寻找比字符串中的字符计数更高级的东西,但没有它的完整校验和那么高级。

最终目标是获得一个十进制值,这样就可以对一个字符串多次运行,重复结果。

您需要一个随机数,但不需要完整的校验和,这是矛盾。我认为md5sumsha1sum非常容易使用,应该适合您的需求:

md5sum <<< "$your_str"

sha1sum <<< "$your_str"

更新:

如果你需要十进制数字,只需:

n=$(md5sum <<< "$your_str")
echo $((0x${n%% *}))

将字符串abc散列为3位小数:

echo $((0x$(echo abc | md5sum | cut -f 1 -d " " | cut -c 1-3))) | cut -c 1-3

例如,要获得4位小数而不是3位小数,请用4:替换两次出现的3

echo $((0x$(echo abc | md5sum | cut -f 1 -d " " | cut -c 1-4))) | cut -c 1-4
  • $(echo abc | md5sum | cut -f 1 -d " " | cut -c 1-4)给出一个由4位数字组成的十六进制
  • $((0xHEX))将十六进制(HEX(转换为十进制,即使HEX有4个数字,十进制也可能有4个以上的数字,例如ffff65535
  • cut -c 1-4获取前4位数字
$ echo abc | md5sum | grep -Eo "[[:digit:]]{3}"  | head -n1
Result -> 248
$ echo xyz | md5sum | grep -Eo "[[:digit:]]{3}"  | head -n1
Result -> 627

组合其他答案!

对于HEX颜色

echo abc | sha1sum | grep -Eo "[a-f0-9]{6}"  | head -n1
03cfd7
echo abc | sha256sum | grep -Eo "[a-f0-9]{6}"  | head -n1
edeaaf
echo abc | sha512sum | grep -Eo "[a-f0-9]{6}"  | head -n1
4f285d

最新更新