我知道那里有很多随机数发生器,但我正在寻找可能更可预测的东西。有没有办法在给定字符串的情况下获得“随机”数字(在每个实例中都是相同的)?我想在bash中这样做。我正在寻找比字符串中的字符数更高级的东西,但不像它的完整校验和那样先进。
最终目标是获取一个十进制值,因此可以多次重复结果对字符串运行。
答案 0 :(得分:6)
您需要一个随机数字,但您不需要完整的校验和,它是矛盾。我认为md5sum
和sha1sum
非常易于使用并且符合您的需求:
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位数,例如ffff
是65535
。cut -c 1-4
获得前4位数字。