34.6. 괴상한 것(Oddities)

과연 스크립트가 자신을 재귀적으로 부를 수 있을까요?

예 34-6. 자신을 재귀적으로 부르는 스크립트

#!/bin/bash
# recurse.sh

#  스크립트가 자신을 재귀적으로 부를 수 있을까요?
#  부를 수 있지만, "개념 증명"(proof of concept) 따위의 쓰임새가 아니라면,
#+ 전혀 실용적이지 않습니다.

RANGE=10
MAXVAL=9

i=$RANDOM
let "i %= $RANGE"  # 0 에서 $MAXVAL 사이의 랜덤한 숫자 만들기.

if [ "$i" -lt "$MAXVAL" ]
then
  echo "i = $i"
  ./$0             #   스크립트는 자기 자신의 새 인스턴스를 
                   #+  재귀적으로 만들어 냅니다.
                   #   만들어내 $i 가 $MAXVAL 과 같을 때까지 
                   #+  각 자식 스크립트도 똑같은 동작을 합니다.

#  "if/then" 대신 "while" 루프를 쓰면 문제가 생깁니다.
#  독자들을 위한 연습문제: 왜 문제가 생길까요?

exit 0

경고

재귀가 너무 많이 일어나면 스크립트의 스택 영역을 다 써버리기 때문에 세그폴트가 납니다.