"명령" 없이 cd(쉘 함수)에서 cd(내장)를 호출하면 무한 루프가 발생하는 이유는 무엇입니까?

"명령" 없이 cd(쉘 함수)에서 cd(내장)를 호출하면 무한 루프가 발생하는 이유는 무엇입니까?

나는 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가 충돌합니다.

관련 정보