再帰的にスクリプトを呼び出す

再帰的にスクリプトを呼び出す

指定されたディレクトリ内のすべてのファイルとディレクトリを一覧表示するスクリプトを作成しようとしています。私はこのスクリプトが自分自身を呼び出し、最終的にすべてのファイルとディレクトリを表示したいと思います。私はあなたがこれを簡単にできることを知っています探すしかし、私は欲しい再帰スクリプトの練習、私の再帰パラメータが私が予想したものとなぜ異なるのかわかりません。その値は変更されません。

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

おすすめ記事