나는 O'Reilly의 Bash 책(내 요약) 중 하나에서 다음을 읽은 적이 있습니다.
명령 및 활성화
cd () {
echo "Improved CD !"
# Improvement one;
command cd
# Improvement two;
# Do cool stuff...
}
cd
command
이 명령은 내장 함수를 포함하는 함수가 내장 함수와 동일한 이름을 가질 때 유용합니다. 내장 함수 내의 재귀 루프를 방지합니다.
제 질문은, 함수를 한 번만 호출하면 애초에 재귀 루프가 나타나는 이유는 무엇입니까?
답변1
당신이 시도한다면
cd () {
echo "Improved CD !"
# Improvement one;
cd
# Improvement two;
# Do cool stuff...
}
cd
아니요 command
, 함수가 cd
호출되고 cd
함수가 cd
함수를 호출하고 함수가 함수를 호출하는 cd
식으로 cd
함수 내부의 명령문은 내장 함수 cd
가 아닌 함수를 호출합니다. cd
터미널에서 "개선된 CD!"가 지겹게 반복되는 것을 볼 수 있습니다.
최종 결과는 셸에 따라 달라집니다. Zsh가 중지되고("최대 중첩 함수 수준에 도달함") Bash가 충돌합니다.