과연 스크립트가 자신을 재귀적으로 부를 수 있을까요?
예 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 |
| 경고 |
재귀가 너무 많이 일어나면 스크립트의 스택 영역을 다 써버리기 때문에 세그폴트가 납니다. |