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

Kyl*_*iss 3 string random bash

我知道有很多随机数发生器,但我正在寻找可能更可预测的东西.有没有办法在给定字符串的情况下获得"随机"数字(在每个实例中都是相同的)?我想在bash中这样做.我正在寻找比字符串中的字符数更高级的东西,但不像它的完整校验和那样先进.

最终目标是获取一个十进制值,因此可以多次重复结果对字符串运行.

Mu *_*iao 6

你需要一个随机数,但你不想要一个完整的校验和,这是矛盾的.我认为md5sum并且sha1sum非常容易使用并且应该满足您的需求:

md5sum <<< "$your_str"
Run Code Online (Sandbox Code Playgroud)

要么

sha1sum <<< "$your_str"
Run Code Online (Sandbox Code Playgroud)

更新:

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

n=$(md5sum <<< "$your_str")
echo $((0x${n%% *}))
Run Code Online (Sandbox Code Playgroud)


Iva*_*gai 5

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

echo $((0x$(echo abc | md5sum | cut -f 1 -d " " | cut -c 1-3))) | cut -c 1-3
Run Code Online (Sandbox Code Playgroud)

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

echo $((0x$(echo abc | md5sum | cut -f 1 -d " " | cut -c 1-4))) | cut -c 1-4
Run Code Online (Sandbox Code Playgroud)
  • $(echo abc | md5sum | cut -f 1 -d " " | cut -c 1-4) 给出 4 位的十六进制数。
  • $((0xHEX))将十六进制 ( HEX)转换为十进制,即使HEX有 4 位,也可能超过4 位,例如ffffis 65535
  • cut -c 1-4 获取前 4 位数字。