老司机试车:重击奔驰GLS 动态评测全新宝马X7
目录:
Bash函数本质上是一组可以多次调用的命令。 函数的目的是帮助您使bash脚本更具可读性,并避免一遍又一遍地编写相同的代码。
与大多数编程语言相比,Bash函数有所限制。 在本教程中,我们将介绍Bash函数的基础知识,并向您展示如何在Shell脚本中使用它们。
Bash函数声明
声明bash函数的语法非常简单。 它们可以用两种不同的格式声明:
-
第一种格式以函数名称开头,后跟括号。 这是首选且使用较多的格式。
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
语句终止该函数。 您可以将其视为函数的退出状态。
#!/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
如下所示:
#!/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"
结论
Bash函数是旨在执行特定操作的可重用代码块。 定义后,可以在脚本中多次调用该函数。
您可能还想阅读有关如何使用Bash函数为较长的命令创建令人难忘的快捷键命令的信息。
bash终端






