在bash中定義函數(shù)
function和函數(shù)名字可以任意省略一個(gè)
需要注意的是,函數(shù)必須在被調(diào)用之前定義
如果沒有特別標(biāo)注,bash中的變量都是全局變量,即使定義在函數(shù)內(nèi)部,所以在函數(shù)外部也可以使用;反過來也一樣,在函數(shù)外部定義的變量在函數(shù)內(nèi)部也可以使用。例如在函數(shù)內(nèi)部修改變量
#!/bin/bash update_prefecture() { prefecture=Aomori ←----- 修改在函數(shù)外部定義的變量的值 echo "$prefecture" } prefecture=Hokkaido ←----- 定義變量(全局變量) echo "$prefecture" update_prefecture echo "$prefecture"
結(jié)果是
若想定義只作用于函數(shù)內(nèi)部的局部變量可以加local字段
local 變量名=值
對于嵌套調(diào)用的兩個(gè)函數(shù),在外部函數(shù)中定義一個(gè)局部變量prefecture,然后在內(nèi)部被調(diào)用的函數(shù)中修改變量的值,則修改后的結(jié)果對外部函數(shù)也是有影響的,例如:
#!/bin/bash update_prefecture1() { echo "[update_prefecture1] $prefecture" prefecture=Aomori echo "[update_prefecture1] $prefecture" } update_prefecture2() { local prefecture=Iwate echo "[update_prefecture2] $prefecture" update_prefecture1 echo "[update_prefecture2] $prefecture" } prefecture=Hokkaido echo "$prefecture" update_prefecture2 echo "$prefecture" $ ./local_param_nest.sh Hokkaido [update_prefecture2] Iwate [update_prefecture1] Iwate ←----- 內(nèi)部函數(shù)沿用在外部函數(shù)中定義的變量的值 [update_prefecture1] Aomori ←----- 在內(nèi)部函數(shù)中修改變量值 [update_prefecture2] Aomori ←----- 外部函數(shù)的值也被修改了 Hokkaido ←----- 函數(shù)外部的全局變量不受影響
local命令可以使用和declare命令相同的參數(shù)選,例如定義數(shù)組類型的局部變量
local-aprefectures=(IwateMiyagi)
要想在函數(shù)內(nèi)部使用指定的參數(shù),可以使用位置參數(shù)$1, $2
#!/bin/bash print_argument() { echo "$0 = $0" echo "$1 = $1" echo "$2 = $2" echo "$3 = $3" echo "$# = $#" } print_argument aaa bbb ←----- 在調(diào)用函數(shù)時(shí)傳遞參數(shù)
FUNCNAME是bash的一個(gè)數(shù)組類型的變量,里面保存了當(dāng)前運(yùn)行的所有函數(shù)名,通過變量FUNCNAME獲取并輸出函數(shù)名
審核編輯:劉清
-
Shell
+關(guān)注
關(guān)注
1文章
366瀏覽量
23425 -
Bash
+關(guān)注
關(guān)注
0文章
57瀏覽量
10189
原文標(biāo)題:shell腳本基礎(chǔ)(五)函數(shù)
文章出處:【微信號:FPGA學(xué)姐,微信公眾號:FPGA學(xué)姐】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論