!["명령" 없이 cd(쉘 함수)에서 cd(내장)를 호출하면 무한 루프가 발생하는 이유는 무엇입니까?](https://linux55.com/image/147483/%22%EB%AA%85%EB%A0%B9%22%20%EC%97%86%EC%9D%B4%20cd(%EC%89%98%20%ED%95%A8%EC%88%98)%EC%97%90%EC%84%9C%20cd(%EB%82%B4%EC%9E%A5)%EB%A5%BC%20%ED%98%B8%EC%B6%9C%ED%95%98%EB%A9%B4%20%EB%AC%B4%ED%95%9C%20%EB%A3%A8%ED%94%84%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
나는 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가 충돌합니다.