2017-09-08 2 views
1

Bash에는 내장 함수 인 일부 변수 (예 : $RANDOM)가 있습니다. 제 생각에 $RANDOM은 C 함수 random (예 : man random)을 사용합니다.

그러나 나는 그 정보를 우연히 발견해야했습니다. 내가 할 수 있기를 원하는 것은 man $RANDOM 또는 type $RANDOM (또는 심지어 help $RANDOM)과 같은 것입니다.

그 노력의 문제는 $RANDOM 그래서 어떻게 구현 $RANDOM 같은 특별한 내장 변수에 대해 무엇인지 식별 ​​할

:-) 실제 임의의 숫자로 평가됩니다입니까? Bash 소스 코드를 통해 선별하는 것 외에는 두뇌 능력이 없습니다.

는 확실히 특별한 변수가 무슨 구현을 나타 내기 위해 쉘을 얻을 수있는 방법이

아니면이 외설 '(예 : "이 <N> 이름의 C 함수를 가리키는 내장 변수") 티? * 어깨를 으쓱 *이 이것에

어떤 도움/정보는

감사합니다 :-) 주시면 감사하겠습니다! 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가 get_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 */ 
} 
호출

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

를 기능에 연결된 것을 보여준다

관련 문제