Shell-Script

遞歸呼叫腳本

  • March 23, 2017

我正在嘗試製作一個腳本來列出給定目錄中的所有文件和目錄。我想讓這個腳本呼叫自己,最後顯示所有文件和目錄。我知道您可以使用find輕鬆做到這一點,但我想練習遞歸腳本,我不知道為什麼我的遞歸給定參數不是我所期望的,它的值不會改變。

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

以下行是罪魁禍首:

. Script.sh $source

雖然您可以想像以這種方式進行遞歸,但這很難推理,因為下一級遞歸更改的變數也在呼叫者中更改。可能您只想呼叫它而不採購它:

Script.sh $source

或者,更好的是:

"$0" "$source"

不過,在所有情況下可靠地獲取源腳本有點棘手。更好的是使用函式進行遞歸(在 Bash 中):

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

並聲明其中使用的任何變數flocal這樣它們就不會被遞歸呼叫改變f

引用自:https://unix.stackexchange.com/questions/353211