재귀적으로 스크립트 호출

재귀적으로 스크립트 호출

주어진 디렉토리의 모든 파일과 디렉토리를 나열하는 스크립트를 만들려고 합니다. 나는 이 스크립트가 자신을 호출하고 결국 모든 파일과 디렉터리를 표시하기를 원합니다. 나는 당신이 이것을 쉽게 할 수 있다는 것을 알고 있습니다찾다, 하지만 나는 원한다재귀 스크립트 연습, 내 재귀 매개 변수가 내가 예상한 것과 왜 다른지 모르겠습니다. 해당 값은 변경되지 않습니다.

for source in `find $1 -maxdepth 1 -type d,f`
do
        if [ -f $source ]; then
                echo "`basename $source` is a file"
        fi
        if [ -d $source ]; then 
                echo "`basename $source` is a directory"
                . Script.sh $source
        fi
done

답변1

다음 줄이 범인입니다.

. Script.sh $source

이런 방식으로 재귀를 수행하는 것을 상상할 수 있지만 다음 수준의 재귀에서 변경된 변수도 호출자에서도 변경되기 때문에 추론하기가 어렵습니다. 어쩌면 당신은 그것을 얻지 않고 그것을 부르고 싶을 수도 있습니다 :

Script.sh $source

또는 더 나은 방법은 다음과 같습니다.

"$0" "$source"

하지만 모든 경우에 안정적으로 소스 스크립트를 얻는 것은 약간 까다롭습니다. 더 나은 방법은 (Bash에서) 재귀 함수를 사용하는 것입니다.

function f()
{
   ...
   f different_args
   ...
}

flocal에 대한 재귀 호출로 인해 변경되지 않도록 에서 사용된 모든 변수를 선언합니다 f.

관련 정보