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

时间:2011-09-01 00:25:44

标签: string bash random

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

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

4 个答案:

答案 0 :(得分:6)

您需要一个随机数字,但您不需要完整的校验和,它是矛盾。我认为md5sumsha1sum非常易于使用并且符合您的需求:

md5sum <<< "$your_str"

sha1sum <<< "$your_str"

更新

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

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

答案 1 :(得分:2)

此函数将用等效的十进制数字替换字符串中的每个字符。这是对我原始版本的改进,发表在评论中。

num-from-string() {
    local out i a
    for ((i=0;i<${#1};++i)); do
        printf -v a "%d\n" "'${1:i:1}"
        out+=$((a%10))
    done
    echo "$out"
}

示例:

$ num-from-string abc123
789901

答案 2 :(得分:2)

$ 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

答案 3 :(得分:2)

将字符串abc哈希到3位小数:

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

获得例如4个小数而不是3个小数,将3的两个匹配项替换为4

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位数字。