
Linux bash函数详解
Bash函数本质上是一组可以多次调用的命令。函数的目的是帮助您使bash脚本更具可读性,并避免编写重复的代码
Bash函数本质上是一组可以多次调用的命令。函数的目的是帮助您使bash脚本更具可读性,并避免编写重复的代码。
与大多数编程语言相比,Bash函数能力相当有限。在本教程中,我们将介绍Bash函数的基础知识,并向您展示如何在shell脚本中使用它们。
声明bash函数的语法非常简单。它们可以以两种不同的格式声明。第一种格式以函数名称开头,后跟括号。这是首选和更常用的格式。
function_name () {
commands
}单行版本:
function_name () { commands; }第二种格式以function保留字开头,后跟函数名。
function function_name {
commands
}单行版本:
function function_name { commands; }花括号{}之间的命令列表是函数的主体。围绕函数体的花括号必须通过空格或换行符与主体分隔。
定义函数并不会执行它。要调用bash函数,只需使用函数名称。只要在shell脚本中调用函数,就会执行函数体的命令。
必须在调用任何函数之前定义函数。使用单行函数时,分号;必须遵循函数中的最后一个命令。您应该始终尝试保持函数名称的描述性。
要更好地理解这一点,请查看以下示例:
1 #!/bin/bash
2
3 hello_world () {
4 echo 'hello, world'
5 }
6
7 hello_world在行3中,我们通过命名方式来定义函数,并使用花括号{标记函数体的开始。行4是函数体。函数体可以有多个命令。
行5,结束花括号},定义hello_world函数的结尾。在行7我们正在执行该函数。您可以根据需要多次执行该函数。如果您运行该脚本,它将打印hello, world。
变量作用域
全局变量是可以从脚本中的任何位置访问的变量,与作用域范围无关。在Bash中,默认情况下所有变量都定义为全局变量,即使在函数内部声明也是如此。
可以使用local关键字在函数体内声明局部变量,并且只能在该函数内部使用。您可以在不同的函数中使用相同名称的局部变量。
为了更好地说明变量作用域范围在Bash中的工作原理,让我们考虑一个例子:
#!/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十进制数在1 - 255范围内表示失败。
可以使用return关键字指定返回状态,并将其分配给全局变量$?。return语句会终止函数。您可以将其视为函数的退出状态。
要从函数中返回任意实际的值,我们需要使用其他方法。最简单的选择是将函数的结果分配给全局变量。
从函数获得返回值的另一个更好选择是使用echo或printf将值发送到标准输出stdout。
#!/bin/bash
my_function () {
echo "some result"
return 55
}
my_function
echo $?some result
55#!/bin/bash
my_function () {
local func_result="some result"
echo "$func_result"
}
func_result="$(my_function)"
echo $func_resultsome result我们执行的函数不是简单地将消息打印到标准输出,而是使用$()机制分配给变量func_result。使用此方法func_result变量将保存函数的结果。
Bash函数参数
要将任意数量的参数传递给bash函数,只需将它们放在函数名称后面,用空格分隔即可。最佳做法是用双引号将参数转义,以避免错误地使用带空格的参数。
传递的参数可以通过变量$1,$2,$3... $n,索引1...n对应于参数在函数名后的位置。
$0变量保留给函数的名称。$#变量保存传递给函数的位置参数或者参数的数量。$*或$@变量保存传递给函数的所有位置参数或者参数。
#!/bin/bash
greeting () {
echo "Hello $1"
}
greeting "Joe"Hello Joe结论
至此,您应该很好地理解如何编写bash函数。您可能还想了解如何使用Bash函数为更长的命令创建可记忆的快捷命令。
如果您有任何问题或反馈,请随时发表评论。

















