Korn shell 函數

function 保留字會定義 shell 的函數。shell 會讀取並儲存成內在函數。別名名稱會在讀取函數時分辨出來。shell 會以和指令相同的方式中執行函數,與引數一起傳送為位置參數。

Korn shell 或 POSIX shell 會在呼叫的函數環境中執行函數。下列全部是函數及呼叫中的 Script 所共用的,並會產生負面影響:

  • 變數值及屬性(除非您在函數中使用 typeset 指令來宣告本端變數)
  • 工作目錄
  • 別名、函數定義及屬性
  • 特殊參數 $
  • 開啟檔案

下列項目不為函數及呼叫中的 Script 所共用,而且沒有負面影響。

  • 位置參數
  • 特殊參數 #
  • 呼叫函數時,變數指派清單中的變數
  • 使用函數中的 typeset 指令來宣告的變數
  • Options
  • 設陷。然而,信號會由呼叫中的 Script 所忽略也將會由此函數所忽略。
註: 在較早的 Korn shell 版本中,除了EXITERR 之外, 設陷會由函數以及呼叫 Script 共用。

如果對 0EXIT 的設陷是在函數的主體內部執行,則此動作會在函數完成之後,在呼叫函數的環境中執行。如果設陷是在函數主體外部執行,則此動作會在 Korn shell 結束後立即執行。在較早 Korn shell 的版本中,沒有 0EXIT 中的設陷在函數主體外部,會在此函數結束後立即執行。

執行函數時,會有如 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 檔案中指定。

如果函數未順利完成宣告,則函數定義的結束狀態為零。否則,它將會大於零。函數呼叫的結束狀態是函數最新執行之指令的結束狀態。