linux bash中的$RANDOM在启动时总是一样的

我遇到了这个问题,我很困惑.

我在linux启动过程的最开始时在bash中使用$RANDOM作为测试字符串.非常有趣的是,我观察到每次linux启动时$RANDOM都是一样的.就我而言,它是18869年.

我只是将$RANDOM回显到一个文件.我在每次启动时都观察到相同的数字.在此之后,$RANDOM似乎返回“真实”随机数.

echo "$RANDOM is a test string" >> /tmp/test

任何人都可以解释这个原因吗?

解决方法:

这是Bash 4.2源代码中variables.c的初始种子算法:

static void                                                                                               
seedrand ()                                                                                               
{                                                                                                         
  struct timeval tv;                                                                                      

  gettimeofday (&tv, NULL);                                                                               
  sbrand (tv.tv_sec ^ tv.tv_usec ^ getpid ());                                                            
}  

换句话说,它基于pid和当前时间(以秒和微秒为单位)生成种子(系统精度为~1 / 100秒).

如果在一个小的,可预测的系统上检查$RANDOM,那么在系统时钟初始化之前,您每次都可能看到相同的值.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...