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