【问题标题】:How to find manual doc for bash $RANDOM special variable?如何找到 bash $RANDOM 特殊变量的手动文档?
【发布时间】:2017-09-08 09:07:37
【问题描述】:

在 Bash 中有一些变量(如 $RANDOM)是内置函数。我的理解是$RANDOM使用了C函数random(例如man random)。

但我不得不偶然发现这些信息。我想做的是man $RANDOMtype $RANDOM(甚至help $RANDOM)。

$RANDOM 的尝试问题被评估为实际的随机数 :-)

那么,您如何确定像$RANDOM 这样的特殊内置变量的实现是什么?除了筛选 Bash 源代码,我只是没有脑容量。

当然有一种方法可以让 shell 指示特殊变量的实现方式(例如,“这是一个指向 名称的 C 函数的内置变量”)

或许没有? *耸耸肩*

对此的任何帮助/信息将不胜感激:-)

谢谢!

【问题讨论】:

    标签: bash shell random built-in


    【解决方案1】:

    来自man bash/RANDOM

    RANDOM Each time this parameter is referenced, a random integer between 0 and 32767 is generated.  The sequence of random numbers may be initialized by assigning a value to RANDOM.  If RANDOM is unset, it loses its
           special properties, even if it is subsequently reset.
    

    手册没有说明它是如何实现的。

    否则来自sources : variables.c 显示 RANDOM 链接到函数 get_random

    INIT_DYNAMIC_VAR ("RANDOM", (char *)NULL, get_random, assign_random);
    

    调用get_random_numberseedrandbrand

    /* A linear congruential random number generator based on the example
       one in the ANSI C standard.  This one isn't very good, but a more
       complicated one is overkill. */
    
    /* Returns a pseudo-random number between 0 and 32767. */
    static int
    brand ()
    {
      /* From "Random number generators: good ones are hard to find",
         Park and Miller, Communications of the ACM, vol. 31, no. 10,
         October 1988, p. 1195. filtered through FreeBSD */
      long h, l;
    
      /* Can't seed with 0. */
      if (rseed == 0)
        rseed = 123459876;
      h = rseed / 127773;
      l = rseed % 127773;
      rseed = 16807 * l - 2836 * h;
    #if 0
      if (rseed < 0)
        rseed += 0x7fffffff;
    #endif
      return ((unsigned int)(rseed & 32767));       /* was % 32768 */
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      • 1970-01-01
      • 2021-05-25
      • 2013-12-14
      相关资源
      最近更新 更多