为什么$ RANDOM不是很随机?

 otion 发布于 2023-01-15 12:42

我一直$RANDOM用来生成1-15之间的随机数,以便在两个系统之间产生一点抖动.例如:

sleep $(( RANDOM %= 15 ))

如果我echo $(( RANDOM %= 15 ))每隔几分钟运行一次,那么随机数似乎相当随机.但是,如果我每隔一分钟通过cron开始运行一个带有此调用的脚本,或者甚至只是每隔几秒钟回显一次随机数,随机性就会消失在我的Mac上,我最终会得到11和6之类的非随机值,依次交替,或8,4和2.不是很随机.

在我的一个Linux服务器(CentOS 6.5 x64)上,我添加了以下bash脚本,在第一次循环之后,只是13一遍又一遍地输出:

#!/bin/bash
for ((n = 0; n < 100; n++))
do
  echo $(( RANDOM %= 15 ))
done

我的问题:

    为什么会这样?我知道$RANDOM不适合加密,但为什么一般会产生随机数这么糟糕?

    有没有其他简单的方法可以通过bash脚本获得更随机的数字(即使需要快速连续)?

Todd A. Jaco.. 6

分配给RANDOM设置种子值

RANDOM是一个提供伪随机数的特殊变量.通过使用模运算符,您极大地限制了可能的值,并且通过分配给RANDOM,您将种子值更改为受限集的某个成员,这最终似乎已经确定13.

以下给出了合理的分布:

for i in {1..100}; do echo $(( RANDOM % 15 )); done

通过使用%=而不仅仅是%,您正在设置种子值.不要那样做.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有