現象
用shell腳本實作一個遞回遍歷目錄樹結構的方法,發現只能從第一層目錄往下遍歷有點奇怪,執行 sh -x <腳本名> 命令在debug除錯模式下發現變數的值被改變了. 具體表現就是: 上層函式,呼叫下層函式的時候,下層函式中的值變了后,再回傳上層呼叫,結果其值沒有恢復,即父級函式呼叫子級函式,子級函式中改變了某變數的值,回傳父級函式后,父級函式中的值,也被改變了,
原因
Linux shell中,定義的函式變數,默認是全域global的,即使是在函式中定義的變數,也是,所以,遞回函式中的變數,由于多數都是區域變數,導致下一層呼叫中修改了某個變數之,回傳上一層后,同一個變數的值,也同時被改變了,所以導致運行結果不對,
解決辦法
解決辦法就是,把(遞回函式中的)所有的變數之前加上local定義,表示區域變數,這樣運行的結果,和函式執行邏輯,就和C等其他語言類似,結果也就都正確了,
例如:
# bash:
fun () {
local abc
..
}
# ksh:
fun () {
typeset abc
..
}
參考
https://www.cnblogs.com/cdyboke/p/6553530.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/385307.html
標籤:其他
上一篇:Linux一些服務安裝啟動命令
