Bash 中的函式

Fumbani Banda 2023年1月30日
  1. Bash 中的函式
  2. 在 Bash 中定義函式
  3. 示例函式
  4. Bash 函式中的變數範圍
  5. Bash 函式中的返回值
  6. 將引數傳遞給 Bash 函式
Bash 中的函式

本教程通過使用不帶 function 關鍵字的函式和帶 function 關鍵字的函式來解釋 Bash 中的基本函式及其在 Bash 指令碼中的用法。

Bash 中的函式

Bash 中的函式是一組完成特定任務的命令。我們可以一遍又一遍地使用函式;這有助於避免重複編寫同一組命令。函式還使指令碼更具可讀性。

通常,函式接收資料、處理資料並返回一個值。但是,在 bash 指令碼中,函式只返回最後一個命令的退出狀態。

退出狀態是 0255 之間的任何值。退出狀態 0 表示命令已成功執行。

在 Bash 中定義函式

在 Bash 中,有兩種符號來宣告函式。第一種表示法使用帶括號的函式名稱,後跟花括號,如下所示。

name_of_function(){
  command1
  command2
}

上面的符號也可以寫成一行。

name_of_function(){command1; command2} 

第二種表示法使用 function 關鍵字宣告函式,後跟括號和花括號,如下所示。

function name_of_function(){
  command1
  command2
}

我們還在一行中宣告瞭該函式,如下所示。

function name_of_function(){command1; command2}

示例函式

下面的指令碼演示了在 bash 指令碼中使用函式。首先,我們定義函式,然後通過呼叫它來執行它。下面的指令碼使用第一種語法,即使用函式名後跟括號和大括號。

我們定義了一個名為 greet 的函式;花括號表示函式的主體。我們在函式體內有兩個 echo 語句,將文字列印到標準輸出。

要在 Bash 中呼叫函式,請鍵入函式的名稱。下面指令碼的最後一行呼叫函式 greet

#!/bin/bash

greet(){
   echo  "Hello, World!"
   echo  "Bash is Fun!"
}

greet

該指令碼將以下輸出列印到標準輸出。

Hello, World!
Bash is Fun!

下面的 bash 指令碼使用 function 關鍵字後跟函式名稱 add 來定義一個函式。add 函式使用 expr 命令將兩個數字 37 相加,並將總和分配給 var 變數。echo 命令將 var 變數的值顯示到標準輸出。

帶有函式名稱的最後一行用於呼叫函式以執行。

#!/bin/bash
function add(){
   var=`expr 3 + 4`
   echo $var
}

add

Bash 函式中的變數範圍

在 Bash 中,預設情況下所有變數都是全域性變數。我們可以在 Bash 指令碼的任何地方訪問全域性變數,甚至在函式內部。在函式內部定義的變數也是 Bash 中的全域性變數。

要在 Bash 中的函式內定義區域性變數,我們使用 local 關鍵字。

下面的指令碼通過定義全域性變數 xy 以及 add 函式中的一個稱為 sum 的區域性變數來演示變數範圍。

#!/bin/bash

x=2
y=4

function add(){
   local sum
   sum=`expr $x + $y`
   echo $sum
}

add

在上面的指令碼中,變數 xy 是全域性變數。我們可以在指令碼的任何地方訪問這些。變數 sum 是一個區域性變數,因為已使用 local 關鍵字來定義它。

我們只能訪問定義的函式體內的區域性變數。在這種情況下,區域性變數 sum 只能在 add 函式的主體內使用。在 add 函式體之外訪問區域性變數 sum 將引發錯誤。

Bash 函式中的返回值

Bash 函式在呼叫其他程式語言中的函式時不會返回值。Bash 函式僅返回要執行的最後一個命令的退出狀態。

退出狀態可以是 0255 之間的任何值。退出狀態 0 表示命令已成功執行。我們可以通過列印 $? 的值來訪問退出狀態。

當呼叫 add 函式時,它會執行其主體內的命令。第一行將 expr 命令的結果賦給 sum 變數。

第二行使用 echo 命令將 sum 變數的值列印到標準輸出。最後一行將退出狀態值列印到標準輸出。

列印的退出狀態是先前執行的命令的退出狀態;退出狀態程式碼用於顯示 sum 變數值的 echo 命令。

#!/bin/bash

add(){
    sum=`expr 2 + 3`
    echo "Sum: $sum"
    echo "Exit Status: $?"
}

add

執行指令碼會向標準終端顯示以下輸出。

Sum: 5
Exit Status: 0

將引數傳遞給 Bash 函式

要將引數傳遞給 bash 函式,請在呼叫函式時將引數放在以空格分隔的函式名旁邊。 $n 表示法可以訪問引數。

n 表示引數在函式名旁邊的位置。在我們的例子中,$1 代表第一個引數 1$2 代表第二個引數 2

function add(){
   sum=`expr $1 + $2`
   echo $sum
}

add "1" "2"

變數 $0 保留表示函式名,而 $# 儲存傳遞給函式的位置引數的數量。

上面的指令碼將以下輸出生成到標準輸出。

3
作者: Fumbani Banda
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub