Korn shell 函數
function 保留字會定義 shell 的函數。shell 會讀取並儲存成內在函數。別名名稱會在讀取函數時分辨出來。shell 會以和指令相同的方式中執行函數,與引數一起傳送為位置參數。
Korn shell 或 POSIX shell 會在呼叫的函數環境中執行函數。下列全部是函數及呼叫中的 Script 所共用的,並會產生負面影響:
- 變數值及屬性(除非您在函數中使用 typeset 指令來宣告本端變數)
- 工作目錄
- 別名、函數定義及屬性
- 特殊參數
$
- 開啟檔案
下列項目不為函數及呼叫中的 Script 所共用,而且沒有負面影響。
- 位置參數
- 特殊參數
#
- 呼叫函數時,變數指派清單中的變數
- 使用函數中的 typeset 指令來宣告的變數
- Options
- 設陷。然而,信號會由呼叫中的 Script 所忽略也將會由此函數所忽略。
如果對 0 或 EXIT 的設陷是在函數的主體內部執行,則此動作會在函數完成之後,在呼叫函數的環境中執行。如果設陷是在函數主體外部執行,則此動作會在 Korn shell 結束後立即執行。在較早 Korn shell 的版本中,沒有 0 或 EXIT 中的設陷在函數主體外部,會在此函數結束後立即執行。
執行函數時,會有如 Korn shell 或 POSIX shell 內建指令中所說明的相同語法錯誤及變數指派內容。
每次在函數名稱被指定為簡式指令名稱時就會執行複合指令。運算元當作暫時的指令,在複合指令執行期間將會成為 positional 參數。特殊參數 #
也將變更為反應運算元的編號。特殊參數 0
將不會變更。
return 特殊指令是用來從呼叫函數中返回的。在函數內部發生錯誤,控制權會返回至呼叫程式。
函數 ID 是利用 typeset 特殊指令的 -f 或 +f 選項列出。-f 選項也會列出函數的文字。函數是使用 unset 特殊指令的 -f 選項取消定義。
通常,函數會在 shell 執行 shell Script 時取消設定。typeset 特殊指令的 -xf 選項允許函數匯出至執行不具個別 shell 呼叫的 Script 中。必須在個別的 shell 呼叫之間定義的函數,應該利用 typeset 特殊指令的 -xf 選項,於 ENV 檔案中指定。
如果函數未順利完成宣告,則函數定義的結束狀態為零。否則,它將會大於零。函數呼叫的結束狀態是函數最新執行之指令的結束狀態。