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 */ 
}