Итак, я хотел создать сценарий оболочки, который подсчитывает все скрытые файлы, псевдонимы и подкаталоги в папке. Проблема в том, что рекурсивный вызов созданной мною функции не выходит за пределы первого уровня глубины go:
function recursive_func()
{
current=$1
echo $current
for thing in $(ls -A $current)
do
if [ -d $current/$thing ]
then
let subd++
recursive_func $current/$thing
elif [ -L $thing ] ; then
let symlinks++
elif [ -f $thing -a ${thing:0:1} == "." ] ; then
let hidden++
fi
done
}
Однако одному из моих коллег это удалось, и это выглядит так:
function recursive_func()
{
echo $1
for thing in $(ls -A $1)
do
path=$1/$thing
if [ -d $path ]
then
let subd++
recursive_func $path
elif [ -L $path ] ; then
let symlinks++
elif [ -f $path-a ${thing:0:1} == "." ]; then
let hidden++
fi
done
}
Я не могу сказать, почему вторая версия работает, а моя нет. Любая помощь?
Редактировать: Проблема состояла в том, что current
был глобальным, и поэтому после каждого рекурсивного вызова значение было неправильным для остальных итераций в for
l oop. Исправлена ошибка, добавлявшая local
перед current
, или просто взамен $1
.