Bash 函数

2020-09-30 09:32 更新

函数可以有效减少您重复编写程序段的工作量,可随时重复调用。

函数声明

  1. 首选常用格式,以函数名称开头。
    1. function_name() {
    2. commands
    3. }

  1. 以 Function 开头,后接函数名。
    1. function function_name() {
    2. commands
    3. }
  2. 两种格式的单行压缩,请仔细对照。
    1. function_name() {commands;}
    2. function function_name() {commands;}

    注:
    - 请仔细观察空格,严格遵守语法格式。
    - commands是函数主体,即命令集。
    - 使用单行压缩函数时,;必须跟随函数主体中的最后一个命令。
    - 您最好始终保持功能性名称的描述性,以方便您在封装完毕之后调用。

示例:

  1. #!/bin/bash
  2. W3Cschool(){
  3. echo "Welcome to W3Cschool"
  4. }
  5. W3Cschool

执行后得到以下结果:

  1. Welcome to W3Cschool

变量作用域

在 Bash 中,在默认情况下所有变量都定义为全局变量,即使在函数内部声明也是如此。

您可以使用local关键字在函数内部声明局部变量,该变量只能够在该函数内部使用。同其他编程语言一样,这意味着您可以声明相同名称的全局变量。

  1. #!/bin/bash
  2. str1="abc"
  3. str2="bcd"
  4. fun(){
  5. local str1="123"
  6. str2="234"
  7. echo "Inside function:str1_value is ${str1},str2_value is ${str2}."
  8. }
  9. echo "Before executing function:str1_value is ${str1},str2_value is ${str2}."
  10. fun
  11. echo "After executing function:str1_value is ${str1},str2_value is ${str2}."

执行后得到以下结果:

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

注:

  • 由执行结果得出。
    1. 在变量名相同的情况下,局部变量的优先级在函数内部高于全局变量。可以理解为就近原则。
    2. 全局变量可以在函数内部更改它的值。

返回值

在 Bash 函数中,其返回值是执行的最后一个语句的状态。1-255(十进制)范围内表示失败,除此之外表示成功。

  1. 您可以使用return语句指定返回状态,并将其分配给$?。该语句会终止函数的调用。如下所示:

  1. #!/bin/bash
  2. fun(){
  3. echo "result"
  4. return 66
  5. }
  6. fun
  7. echo $?

执行后得到以下结果:

  1. result
  2. 66

  1. 若您想要从函数中返回任意实际的值,最简单的选择是将函数的执行结果分配给一个全局变量,如下所示:

  1. #!/bin/bash
  2. fun(){
  3. fun_result="value"
  4. }
  5. fun
  6. echo $fun_result

执行后得到以下结果:

  1. value

  1. 还有一个更好的选择是将值发送到 stdout 再打印输出,如下所示:

  1. #!/bin/bash
  2. fun(){
  3. local fun_result="value"
  4. echo "$fun_result"
  5. }
  6. fun
  7. echo $fun_result

执行后得到以下结果:

  1. value

注:
- 利用 $()机制将函数执行结果分配给变量fun_result,以此保存函数的执行结果。

参数传递

若您想要将任意数量的参数传递给 Bash 函数,只需要将它们放在调用的函数名后面,以空格分隔,以" "将参数转义。

注:
- 参数传递的顺序位为 $1$2···$n,在传参时应严谨的根据需要排序以达到您所期望的效果。
- $#保存传递给函数的函数的位置参数或数量。
- $*$@保存传递给参数的所有位置参数或参数。

示例:

  1. #!/bin/bash
  2. fun(){
  3. echo "Welcome to $1"
  4. }
  5. fun "W3Cschool"

执行后得到以下结果:

  1. Welcome to W3Cschool
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号