Home > front end >  Why does recursive function go though only one sub directory
Why does recursive function go though only one sub directory

Time:12-12

I have found the answer to get my code to work but I want to know why it works and my code doesn't

rFunc() {
  for d in *; do
    if [ -d "$d" ]; then
      cd "$d"
      rFunc
    fi
    #Do Something
  done
}

This code will go though only one sub directory but if I use the code from this answer it goes though all sub directories. Why?

(cd -- "$d" && rFunc)

Also, what is the purpose of the --? My code works without it.

CodePudding user response:

(cd -- "$d" && rFunc) performs the cd in subshell and the parent call's current directory is unchanged, whereas your version cd's into $d but doesn't back out of it after rFunc returns.

To fix yours you should put the subshell back in, or go back up to the parent directory explicitly, e.g. with:

cd "$d"
rFunc
cd ..

or:

pushd "$d"
rFunc
popd
  • Related