2017-09-08 39 views
1

在Bash中有一些变量(如$RANDOM)是内置函数。我的理解是$RANDOM使用C函数random(例如man random)。我不得不绊倒那些信息。我想要做的事情就像man $RANDOMtype $RANDOM(或甚至help $RANDOM)。

,试图使问题得到$RANDOM评价:-)

实际的随机数,那么你如何识别实现什么样$RANDOM一个特殊的内置变量?除了筛选Bash源代码,我只是没有大脑的能力。

肯定有办法让shell来表示一个特殊的变量有什么实现(例如,“这是一个指向的<ñ>名称的C函数一个内置变量”)

或许有ISN” T' *耸耸肩*这个

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

谢谢!

回答

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显示,随机连接的功能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 */ 
} 
相关问题