Bash 函數(shù)

2020-09-30 09:32 更新

函數(shù)可以有效減少您重復編寫程序段的工作量,可隨時重復調(diào)用。

函數(shù)聲明

  1. 首選常用格式,以函數(shù)名稱開頭。
    function_name() {
    commands
    }

  1. 以 Function 開頭,后接函數(shù)名。
    function function_name() {
    commands
    }
  2. 兩種格式的單行壓縮,請仔細對照。
    function_name() {commands;}
    function function_name() {commands;}

    注:
    - 請仔細觀察空格,嚴格遵守語法格式。
    - commands是函數(shù)主體,即命令集。
    - 使用單行壓縮函數(shù)時,;必須跟隨函數(shù)主體中的最后一個命令。
    - 您最好始終保持功能性名稱的描述性,以方便您在封裝完畢之后調(diào)用。

示例:

#!/bin/bash


W3Cschool(){
 echo "Welcome to W3Cschool"
}


W3Cschool

執(zhí)行后得到以下結(jié)果:

Welcome to W3Cschool

變量作用域

在 Bash 中,在默認情況下所有變量都定義為全局變量,即使在函數(shù)內(nèi)部聲明也是如此。

您可以使用local關鍵字在函數(shù)內(nèi)部聲明局部變量,該變量只能夠在該函數(shù)內(nèi)部使用。同其他編程語言一樣,這意味著您可以聲明相同名稱的全局變量。

#!/bin/bash


str1="abc"
str2="bcd"


fun(){
    local str1="123"
    str2="234"
    echo "Inside function:str1_value is ${str1},str2_value is ${str2}."
}


echo "Before executing function:str1_value is ${str1},str2_value is ${str2}."


fun


echo "After executing function:str1_value is ${str1},str2_value is ${str2}."

執(zhí)行后得到以下結(jié)果:

Before executing function:str1_value is abc,str2_value is bcd.
Inside function:str1_value is 123,str2_value is 234.
After executing function:str1_value is abc,str2_value is 234.

注:

  • 由執(zhí)行結(jié)果得出。
    1. 在變量名相同的情況下,局部變量的優(yōu)先級在函數(shù)內(nèi)部高于全局變量??梢岳斫鉃榫徒瓌t。
    2. 全局變量可以在函數(shù)內(nèi)部更改它的值。

返回值

在 Bash 函數(shù)中,其返回值是執(zhí)行的最后一個語句的狀態(tài)。1-255(十進制)范圍內(nèi)表示失敗,除此之外表示成功。

  1. 您可以使用return語句指定返回狀態(tài),并將其分配給$?。該語句會終止函數(shù)的調(diào)用。如下所示:

    #!/bin/bash


    fun(){
        echo "result"
        return 66
    }


    fun
    echo $?

執(zhí)行后得到以下結(jié)果:

    result
    66

  1. 若您想要從函數(shù)中返回任意實際的值,最簡單的選擇是將函數(shù)的執(zhí)行結(jié)果分配給一個全局變量,如下所示:

    #!/bin/bash


    fun(){
        fun_result="value"
    }


    fun
    echo $fun_result

執(zhí)行后得到以下結(jié)果:

    value

  1. 還有一個更好的選擇是將值發(fā)送到 stdout 再打印輸出,如下所示:

    #!/bin/bash


    fun(){
        local fun_result="value"
        echo "$fun_result"
    }


    fun
    echo $fun_result

執(zhí)行后得到以下結(jié)果:

    value

注:
- 利用 $()機制將函數(shù)執(zhí)行結(jié)果分配給變量fun_result,以此保存函數(shù)的執(zhí)行結(jié)果。

參數(shù)傳遞

若您想要將任意數(shù)量的參數(shù)傳遞給 Bash 函數(shù),只需要將它們放在調(diào)用的函數(shù)名后面,以空格分隔,以" "將參數(shù)轉(zhuǎn)義。

注:
- 參數(shù)傳遞的順序位為 $1、$2···$n,在傳參時應嚴謹?shù)母鶕?jù)需要排序以達到您所期望的效果。
- $#保存?zhèn)鬟f給函數(shù)的函數(shù)的位置參數(shù)或數(shù)量。
- $*$@保存?zhèn)鬟f給參數(shù)的所有位置參數(shù)或參數(shù)。

示例:

#!/bin/bash


fun(){
    echo "Welcome to $1"
}


fun "W3Cschool"

執(zhí)行后得到以下結(jié)果:

Welcome to W3Cschool
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號