Linux bash函数详解
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
1 #!/bin/bash2
3 hello_world () {
4 echo 'hello, world'
5 }
6
7 hello_world
让我们逐行分析代码:
- 在行
3
中,我们通过命名方式来定义函数,并使用花括号{
标记函数体的开始。 - 行
4
是函数体。函数体可以有多个命令。 - 行
5
,结束花括号}
,定义hello_world
函数的结尾。 - 在行
7
我们正在执行该函数。您可以根据需要多次执行该函数。
如果您运行该脚本,它将打印hello, world
。
变量作用域
全局变量是可以从脚本中的任何位置访问的变量,与作用域范围无关。在Bash中,默认情况下所有变量都定义为全局变量,即使在函数内部声明也是如此。
可以使用 local
关键字在函数体内声明局部变量,并且只能在该函数内部使用。您可以在不同的函数中使用相同名称的局部变量。
为了更好地说明变量作用域范围在Bash中的工作原理,让我们考虑一个例子:
〜/variables_scope.sh
#!/bin/bashvar1='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: BInside function: var1: C, var2: D
After executing function: var1: A, var2: D
从上面的输出中,我们可以得出结论:
- 如果在函数体内设置一个局部变量,其名称与现有全局变量的名称相同,则它将优先于全局变量。
- 可以在函数内更改全局变量。
返回值
与“真正的”编程语言中的函数不同,Bash函数不允许您在调用时有返回值。当bash函数完成时,其返回值是函数中执行的最后一个语句的状态,0
表示成功和非0
十进制数在1 - 255范围内表示失败。
可以使用return
关键字指定返回状态,并将其分配给变量$?
。return
语句会终止该函数。您可以将其视为函数的退出状态。
〜/return_values.sh
#!/bin/bashmy_function () {
echo "some result"
return 55
}
my_function
echo $?
some result55
要从函数中返回任意实际的值,我们需要使用其他方法。最简单的选择是将函数的结果分配给全局变量:
〜/return_values.sh
#!/bin/bashmy_function () {
func_result="some result"
}
my_function
echo $func_result
some result
从函数获得返回值的另一个更好选择是将值发送到stdout
(标准输出)使用echo或printf
如下所示:
〜/return_values.sh
#!/bin/bashmy_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
变量保留给函数的名称。$#
变量保存传递给函数的位置参数或者参数的数量。$*
或[email protected]
变量保存传递给函数的所有位置参数或者参数。
这是一个例子:
〜/passing_arguments.sh
#!/bin/bashgreeting () {
echo "Hello $1"
}
greeting "Joe"
Hello Joe
结论
至此,您应该很好地理解如何编写bash函数。您可能还想了解如何使用Bash函数为更长的命令创建可记忆的快捷命令。如果您有任何问题或反馈,请随时发表评论。请在下面留言。如果你喜欢我们的内容可以选择在下方二维码中捐赠我们,或者点击广告予以支持,感谢你的支持
以上是 Linux bash函数详解 的全部内容, 来源链接: utcz.com/z/506966.html