在bash中定义函数
function和函数名字可以任意省略一个
需要注意的是,函数必须在被调用之前定义
如果没有特别标注,bash中的变量都是全局变量,即使定义在函数内部,所以在函数外部也可以使用;反过来也一样,在函数外部定义的变量在函数内部也可以使用。例如在函数内部修改变量
#!/bin/bash update_prefecture() { prefecture=Aomori ←----- 修改在函数外部定义的变量的值 echo "$prefecture" } prefecture=Hokkaido ←----- 定义变量(全局变量) echo "$prefecture" update_prefecture echo "$prefecture"
结果是
若想定义只作用于函数内部的局部变量可以加local字段
local 变量名=值
对于嵌套调用的两个函数,在外部函数中定义一个局部变量prefecture,然后在内部被调用的函数中修改变量的值,则修改后的结果对外部函数也是有影响的,例如:
#!/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 ←----- 内部函数沿用在外部函数中定义的变量的值 [update_prefecture1] Aomori ←----- 在内部函数中修改变量值 [update_prefecture2] Aomori ←----- 外部函数的值也被修改了 Hokkaido ←----- 函数外部的全局变量不受影响
local命令可以使用和declare命令相同的参数选,例如定义数组类型的局部变量
local -a prefectures=(Iwate Miyagi)
要想在函数内部使用指定的参数,可以使用位置参数$1, $2
#!/bin/bash print_argument() { echo "$0 = $0" echo "$1 = $1" echo "$2 = $2" echo "$3 = $3" echo "$# = $#" } print_argument aaa bbb ←----- 在调用函数时传递参数
FUNCNAME是bash的一个数组类型的变量,里面保存了当前运行的所有函数名,通过变量FUNCNAME获取并输出函数名
全部0条评论
快来发表一下你的评论吧 !