shell程序设计(四)函数

Bash ginotang 716℃ 0评论

函数定义

可以通过两种方法定义函数,其中一种和c语言中的函数定义比较类似,不同的是,shell的函数没有参数列表。而另一种则和php比较类似,使用关键字function。

类C的函数定义

类php的函数定义

这种方式不需要圆括号,但是函数名称和{之间不能有空格。

函数调用

函数调用之前必须事先声明,调用函数只需要使用函数的名称即可,不需要把括号也写上。

函数参数

函数没有参数列表,函数可以使用的参数和传递给脚本的参数一样,即位置参数($*、$@、$#、$1,、$2)等等。但是,要注意区分函数的位置参数和脚本的位置参数,它们不对等,函数体内部不能直接使用脚本的位置参数。当函数执行完毕,这些参数会恢复为它们先前的值(某些老版本的shell没有这个行为,因此不具备移植性)。

执行结果:

我们给脚本传递了位置参数,但是函数体内部并不能直接使用脚本的位置参数,因此打印输出为空。如果要在函数体内使用脚本的参数,必须把脚本的参数传递给函数:

使用数组作为函数参数的时候需要注意:

注意最后一行,传递的是${Fruits[@]},而不是$Fruits,因为前者才是完整的数组元素,后者等于${Fruits[0]},即第一个数组元素。

函数返回值

函数的默认返回值是函数中最后一行代码的返回值,可以通过两种方式改变这个行为:

  • 使用return关键字明确返回一个值
  • 通过$()执行符号捕获函数中的输出

当使用return返回值的时候,注意只能返回0~255之间的值,且必须是整数,任何大于255的返回值会被取模后再返回。如果希望返回更大的数值,则可以通过第二种方式,即使用$()捕获。

当然这种方法也有注意事项:$()只捕获函数中第一个echo输出的值。

本地变量和全局变量

可以使用local关键字在shell函数中声明局部变量,该变量只在函数的作用范围内有效。如果全局变量和本地变量同名,则本地变量会覆盖全局变量。例如:

输出结果是:local var

转载请注明:Pure nonsense » shell程序设计(四)函数

喜欢 (0)
0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
()
x