參數的傳遞
 
 
利用 Position Variable 傳遞參數
 
   
Shell 在呼叫函數時,如何將參數傳給函數? 第一種方式:就是利用Position variable 即可,在呼叫時,就像使用一般指令一般,函數名稱在前,其他參數 一一接上,而在函數內部則用 Position Variable 取用。原先的 Shell (parent shell) 所有的position variable 在函數中暫時不能使用,但$0 在函數中,維持為 parent shell 的名稱,仍然可以使用。等函數結束,原先的 position variable 會恢復原值可以使用。 (註 :某些系統可能會有不一樣的設計,parent shell 的 Position Variables 可能會被蓋掉而失去原來的值。
 
 
利用一般使用者變數傳遞參數
 
   
第二種方式則是利用一般使用者變數傳遞參數,換言之,parent shell 所擁有的使用者變數,在函數中都可以用得到,變數若在函數中被改變, 那 parent shell原來的值會被蓋掉,不被保留。 對使用者變數而言,函數的功能比較像 Macro 而不像傳統意義的函數。
 
   
為了避免變數名稱的衝突,導致不測的邏輯錯誤,建議讀者保持一個 能避免衝突的變數名稱命名的習慣,例如: 所有在函數內定義的變數名稱, 都是以"_"開頭,而一般的script 則避免如此命名變數,就可以用人為方法 避開變數名稱之衝突。
 
 
Shell 函數具有 recursive 功能(危險!)
 
   
Shell 函數雖然具有 recursive 功能,但是變數名稱的衝突 卻須使用者自行解決,非常繁瑣而危險,不建議讀者使用 recursive 功能。

Web Page Copyright: 亞洲大學資訊電機學院 連耀南 yaonanlien@asia.edu.tw  func2.htm,  Thu Sep 7 16:18:55 CST 2023