Shell-Script
遞歸呼叫腳本
我正在嘗試製作一個腳本來列出給定目錄中的所有文件和目錄。我想讓這個腳本呼叫自己,最後顯示所有文件和目錄。我知道您可以使用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 ... }
並聲明其中使用的任何變數
f
,local
這樣它們就不會被遞歸呼叫改變f
。