如何在 Bash 中使用函式
函式是每個程式語言中最重要的一個方面,它使我們的程式碼具有可重用性和可讀性。重複使用的同一段程式碼就寫在函式裡面。而當我們需要程式碼塊時,我們只需呼叫定義的函式即可。
在 Bash 中定義函式
要在 Bash
中定義函式,我們可以使用以下兩種方法中的任何一種。
在這種方法中,我們寫下函式的名稱,後面加括號。然後,我們在大括號內定義函式。使用這種格式的函式可以使用任何一種格式來定義。
function_name(){
statements
}
function_name() { statements }
在這種方法中,我們在函式名稱前指定 function
關鍵字。
function_name(){
statements
}
function_name() { statements }
大括號內的語句決定了函式的作用。函式名與函式的作用無關,但我們必須使函式名具有描述性。定義函式不會有任何作用。要執行函式定義中的命令,我們必須呼叫函式。
要在 Bash
中呼叫函式,我們使用函式的名稱。
#! /bin/bash
greet(){
echo 'Hello, Folks. Welcome to DelftStack!'
}
greet
輸出:
Hello, Folks. Welcome to DelftStack!
在這裡,我們在一開始就用 greet
這個名字定義函式,然後呼叫函式。當我們呼叫函式的時候,函式定義裡面的語句就會被執行,因此我們看到 Hello, Folks. Welcome to DelftStack!
在終端列印出來。
我們還可以使用另一種方法來定義函式:
#! /bin/bash
function greet(){
echo 'Hello, Folks. Welcome to DelftStack!'
}
greet
輸出:
Hello, Folks. Welcome to DelftStack!
我們必須確保在呼叫函式之前,我們總是先定義函式。
Bash 中變數的作用域
在 Bash 中, 變數的作用域可以是全域性的, 也可以是區域性的. 然而, 變數的預設作用域總是全域性的, 即使它是在函式作用域內宣告的. 我們必須使用 local
關鍵字來使一個變數成為區域性變數。
#! /bin/bash
gvar1=1
gvar2=2
change_variables() {
local gvar1=10
gvar2=7
echo "Inside Function: gvar1: $gvar1, gvar2: $gvar2"
}
echo "Before executing function: gvar1: $gvar1, gvar2: $gvar2"
change_variables
echo "After executing function: gvar1: $gvar1, gvar2: $gvar2"
輸出:
Before executing function: gvar1: 1, gvar2: 2
Inside Function: gvar1: 10, gvar2: 7
After executing function: gvar1: 1, gvar2: 7
在這裡,宣告在頂部的 gvar1
和 gvar2
是全域性變數。
在函式內部,由於我們對 gvar1
使用了 local
關鍵字,所以 gvar1
被宣告為一個區域性變數,而 gvar2
仍然是一個全域性變數,因為它沒有 local
關鍵字。因此,gvar2
的值是由函式全域性改變的,而 gvar1
的值只在函式內部改變。
Bash 中函式的返回值
與其他程式語言相反,Bash 不允許我們從函式中返回值。Bash 函式返回的值是函式中最後一條語句的執行狀態。數字 0
代表成功,而從 1-255
代表失敗。我們可以用 return
關鍵字來指定函式的退出狀態。return
語句也會終止函式的執行。
#! /bin/bash
return_value(){
echo "This function returns 20!"
return 30
echo "After return statement"
}
return_value
echo $?
輸出:
This function returns 20!
30
在這裡,我們可以看到,函式 return_value
使用 return
語句返回值 30
,該值被分配到 $?
變數。
我們還可以注意到,在執行完 return
語句後,函式就終止了,因為 return
語句下面的命令不會被執行。
如果我們想從函式中返回某個值,我們可以將該值賦給一個全域性變數,然後從函式外部訪問該變數來檢索該值。
#! /bin/bash
send_message(){
message_from_function="Hello From the function!"
}
send_message
echo $message_from_function
輸出:
Hello From the function!
在程式中,我們把要返回的值分配給全域性變數 message_from_function
,然後訪問該變數的返回值。
向 Bash 函式傳遞引數
要將引數傳遞給一個 Bash 函式,我們只需將引數放在函式後面即可。如果我們想向一個函式傳遞多個引數,我們可以用空格將引數分開。為了避免引數的誤碼,我們可以用雙引號來包裹引數。
根據引數的位置用 $1
、$2
等方式訪問。$0
代表函式名稱,而 $#
則表示函式中位置引數的數量。
#! /bin/bash
send_message(){
message_from_function="Hello $1 "
}
send_message
echo $message_from_function "Delft!"
輸出:
Hello Delft!
在這裡,引數 Delft!
被傳入函式,並在函式中通過引數 $1
訪問,我們得到 Hello Delft!
作為函式的最終輸出。
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn