2017-09-08 2 views
1

Bashには、組み込み関数であるいくつかの変数($RANDOMなど)があります。私の理解では、$RANDOMはC関数random(例:man random)を使用しています。

しかし、私はその情報を偶然見つけなければなりませんでした。私ができるようにしたかったのは、man $RANDOMまたはtype $RANDOM(またはさらにはhelp $RANDOM)のようなものでした。

ことをしようと問題は$RANDOMだから、どのように実装が$RANDOMのような特殊な組み込み変数のために何であるかを識別します

:-)実際の乱数に評価されますか?バッシュのソースコードを使っているだけでは、脳の能力はありません。

はきっと特別な変数が持っているものの実装を示すために、シェルを取得する方法があります

それともそこにISN」(例えば「これは<N>名前のC関数を指す組み込み変数です」) t? *肩をすくめ*

この上の任意のヘルプ/情報

おかげで:-)いただければ幸いです! man bashから

答えて

1

/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が

INIT_DYNAMIC_VAR ("RANDOM", (char *)NULL, get_random, assign_random); 
get_random_numberを呼び出し

seedrandbrand

/* 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 */ 
} 
get_random機能にリンクされていることを示しています
関連する問題