安卓系统

重击功能

老司机试车:重击奔驰GLS 动态评测全新宝马X7

老司机试车:重击奔驰GLS 动态评测全新宝马X7

目录:

Anonim

Bash函数本质上是一组可以多次调用的命令。 函数的目的是帮助您使bash脚本更具可读性,并避免一遍又一遍地编写相同的代码。

与大多数编程语言相比,Bash函数有所限制。 在本教程中,我们将介绍Bash函数的基础知识,并向您展示如何在Shell脚本中使用它们。

Bash函数声明

声明bash函数的语法非常简单。 它们可以用两种不同的格式声明:

  1. 第一种格式以函数名称开头,后跟括号。 这是首选且使用较多的格式。

    function_name () { commands }

    单行版本:

    function_name () { commands; }

    第二种格式以 function 保留字开头,后跟函数名称。

    function function_name { commands }

    单行版本:

    function function_name { commands; }

需要注意的几点:

  • 花括号 {} 之间的命令列表是函数的主体。 包围函数主体的花括号必须用空格或换行符与主体分开。定义函数不会执行它。 要调用bash函数,只需使用函数名称。 在shell脚本中调用函数时,都会在花括号之间执行命令。函数定义必须放在对函数的任何调用之前。使用单行“压缩”函数时,请使用分号 ; 必须遵循函数中的最后一条命令。您应始终保持函数名具有描述性。

为了更好地理解这一点,请看以下示例:

〜/ hello_world.sh

#!/bin/bash hello_world () { echo 'hello, world' } hello_world

让我们逐行分析代码:

  • 在第 3 行中,我们通过给函数命名并打开花括号 { 标记函数主体的开始来定义函数。第 4 是函数主体。 函数主体可以包含多个命令和变量声明。第 5 行( hello_world 花括号 } 定义了 hello_world 函数的末尾。在第 7 行中,我们正在执行该函数。 您可以根据需要多次执行该功能。

如果您运行脚本,它将打印 hello, world

变量范围

全局变量是可以从脚本中的任何位置访问的变量,而不管其范围如何。 在Bash中,即使在函数内部声明,默认情况下所有变量也都定义为全局变量。

局部变量可以在函数体内使用 local 关键字声明,并且只能在该函数内部使用。 您可以在不同的函数中使用具有相同名称的局部变量。

为了更好地说明变量作用域如何在Bash中工作,我们来看一个示例:

〜/ variables_scope.sh

#!/bin/bash var1='A' var2='B' my_function () { local var1='C' var2='D' echo "Inside function: var1: $var1, var2: $var2" } echo "Before executing function: var1: $var1, var2: $var2" my_function echo "After executing function: var1: $var1, var2: $var2"

该脚本首先定义两个全局变量 var1 var2 。 然后是一个设置局部变量 var1 并修改全局变量 var2 的函数。

Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D

从上面的输出中,我们可以得出以下结论:

  • 如果在函数体内设置与现有全局变量同名的局部变量,它将优先于全局变量。可以在函数内部更改全局变量。

返回值

与“真实”编程语言中的函数不同,Bash函数不允许您在调用时返回值。 当bash函数完成时,其返回值是该函数中执行的最后一条语句的状态, 0 表示成功, 0 表示非零十进制数,表示失败。

可以使用 return 关键字指定返回状态,并将其分配给变量 $? return 语句终止该函数。 您可以将其视为函数的退出状态。

〜/ return_values.sh

#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?

some result 55

要从函数实际返回任意值,我们需要使用其他方法。 最简单的选择是将函数的结果分配给全局变量:

〜/ return_values.sh

#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result

some result

从函数返回值的另一个更好的选择是使用echo或 printf 将值发送到 stdout 如下所示:

〜/ return_values.sh

#!/bin/bash my_function () { local func_result="some result" echo "$func_result" } func_result="$(my_function)" echo $func_result

some result

我们不是简单地执行将消息输出到stdout的函数, func_result 使用 $() 命令替换将函数输出分配给 func_result 变量。 以后可以根据需要使用该变量。

将参数传递给Bash函数

要将任意数量的参数传递给bash函数,只需将其放在函数名称之后,并以空格分隔即可。 最好对参数加双引号,以避免对参数中包含空格的错误解析。

  • 传递的参数为 $1 $2 $3 $n ,对应于函数名后参数的位置。 $0 变量保留给函数名。 $# 变量保存传递给函数的位置参数/参数的数量。 $* $@ 变量保存传递给函数的所有位置参数/参数。
    • 用双引号括起来时, "$*" 扩展为单个字符串,用空格分隔(IFS的第一个字符)- "$1 $2 $n" 。用双引号括起来时, "$@" 扩展为单独的字符串- "$1" "$2" "$n" 。不加双引号时, $* $@ 相同。

这是一个例子:

〜/ passing_arguments.sh

#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"

Hello Joe

结论

Bash函数是旨在执行特定操作的可重用代码块。 定义后,可以在脚本中多次调用该函数。

您可能还想阅读有关如何使用Bash函数为较长的命令创建令人难忘的快捷键命令的信息。

bash终端