Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何获得;“随机”;基于Bash中的字符串的数字?_String_Bash_Random - Fatal编程技术网

String 如何获得;“随机”;基于Bash中的字符串的数字?

String 如何获得;“随机”;基于Bash中的字符串的数字?,string,bash,random,String,Bash,Random,我知道那里有很多随机数生成器,但我正在寻找一些更可预测的东西。有没有一种方法可以在给定字符串的情况下得到一个“随机”数(在每个实例中都是相同的)?我想在bash中这样做。我正在寻找比字符串中的字符计数更高级的东西,但没有它的完整校验和高级 最终目标是获得一个十进制值,这样就可以对一个字符串运行多次,重复结果。您需要一个随机数,但不需要完整的校验和,这是矛盾的。我认为md5sum和sha1sum非常容易使用,应该适合您的需要: md5sum <<< "$your_str" md

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


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

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

md5sum <<< "$your_str"
md5sum
结合其他答案

十六进制颜色

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

要将字符串
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-f1-d”“| cut-c1-4)
    给出了一个4位的十六进制数
  • $((0xHEX))
    将十六进制(
    HEX
    )转换为十进制,即使
    HEX
    有4位数字,也可能有4位以上,例如
    ffff
    65535
  • cut-c1-4
    获取前4位数字

为什么不使用像
md5sum
sha1sum
这样的散列函数呢
echo-n“Hello World”| md5sum
。我同意,散列可能是最简单的;我自己也用过类似的方法。你说“不如完整校验和先进”。为什么?
sha1sum
非常容易使用。在什么范围内?你打算用这个数字做什么?所以校验和是最好的方法?我希望得到一个十进制值,所以校验和值不能转换成十进制吗?这正是我要找的。感谢Mu.
md5sum在散列没有3个连续小数的情况下(极少数情况下),3位数的第一个解决方案失败。请参阅我的解决方案,了解始终返回3位小数的方法。
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
echo $((0x$(echo abc | md5sum | cut -f 1 -d " " | cut -c 1-3))) | cut -c 1-3
echo $((0x$(echo abc | md5sum | cut -f 1 -d " " | cut -c 1-4))) | cut -c 1-4