在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-aprefectures=(IwateMiyagi)
要想在函数内部使用指定的参数,可以使用位置参数$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获取并输出函数名

审核编辑:刘清
-
Shell
+关注
关注
1文章
373浏览量
25164 -
Bash
+关注
关注
0文章
57浏览量
10679
原文标题:shell脚本基础(五)函数
文章出处:【微信号:FPGA学姐,微信公众号:FPGA学姐】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
嵌入式和物联网的shell脚本学习指南之shell脚本入门免费下载
109个实用shell脚本分享
shell脚本基础知识
剖析Linux shell 函数实现
shell脚本基础函数
Linux Shell脚本经典案例分享

shell脚本基础函数
评论