Bash $RANDOM Variable
Understanding and using the $RANDOM internal variable in Bash, including its open-source implementation
February 19, 2026

Bash $RANDOM Variable

bash에서 $RANDOM은 호출될 때마다 0~32767 사이의 정수를 반환하는 내장 변수입니다.
단순한 무작위 숫자가 필요할 때 별도의 외부 유틸리티 없이 빠르게 사용할 수 있습니다.

Basic Usage

가장 기본적인 사용법은 변수를 참조하는 것입니다.

Generate random number
sh

특정 범위(예: 1~100)의 숫자를 얻으려면 나머지 연산자(%)를 사용합니다.

Random number in range 1-100
sh

Seeding RANDOM

RANDOM 변수에 값을 할당하면 정수 시드(Seed)가 설정됩니다.
동일한 시드를 주면 매번 동일한 무작위 시퀀스가 생성됩니다.

Setting a seed
sh

Deep Dive: Bash Open Source Code

Bash의 내부에서 $RANDOM이 어떻게 구현되어 있는지 살펴보겠습니다.
Bash 소스 코드(variables.c)를 살펴보면, 이 변수는 단순한 변수가 아니라 동적 변수(Dynamic Variable)로 처리됩니다.

1. Dynamic Variable Registration

Bash 초기화 과정에서 initialize_dynamic_variables() 함수를 통해 RANDOM 변수를 특수 핸들러와 함께 등록합니다.

variables.c - initialize_dynamic_variables
c

2. Generating Random Numbers

사용자가 $RANDOM을 호출하면 get_random() -> get_random_number() 순으로 실행되며, 실제 난수 생성은 brand() 함수(내부 LCG 알고리즘)를 호출합니다.

variables.c - get_random_number
c

3. Seeding via Assignment

사용자가 RANDOM=42와 같이 값을 대입하면 assign_random 함수가 호출되어 난수 생성기의 시드를 초기화합니다.

variables.c - assign_random
c

Key Implementation Details

  • LCG (Linear Congruential Generator): Bash는 성능을 위해 가벼운 brand() 함수를 사용합니다.
    이는 결정론적(Deterministic)이므로 시드가 같으면 결과가 같습니다.
  • Subshell Handling: $(echo $RANDOM)과 같이 서브쉘을 실행할 때 부모와 동일한 난수 시퀀스가 나오는 것을 방지하기 위해, 소스 코드 내에서 getpid()를 체크하여 세션이 다르면 자동으로 seedrand()를 수행합니다.
  • att_integer: $RANDOM은 생성 시점에 이미 정수형 속성이 부여되어 있어, 산술 연산 시 별도의 형변환 오버헤드가 적습니다.
  • $RANDOM의 범위는 0부터 32767(2^15 - 1)까지입니다.
  • 암호학적으로 안전한 난수(CSPRNG)가 아니므로 보안 관련 용도로는 적합하지 않습니다.
  • 더 높은 정밀도나 보안이 필요하다면 /dev/urandom을 사용하는 것이 권장됩니다.
Jooojub
System S/W engineer
Explore Tags
Series
    Recent Post
    © 2026. jooojub. All right reserved.