如何在 Bash 中使用函数
函数是每个编程语言中最重要的一个方面,它使我们的代码具有可重用性和可读性。重复使用的同一段代码就写在函数里面。而当我们需要代码块时,我们只需调用定义的函数即可。
在 Bash 中定义函数
要在 Bash
中定义函数,我们可以使用以下两种方法中的任何一种。
在这种方法中,我们写下函数的名称,后面加括号。然后,我们在大括号内定义函数。使用这种格式的函数可以使用任何一种格式来定义。
function_name(){
statements
}
function_name() { statements }
在这种方法中,我们在函数名称前指定 function
关键字。
function_name(){
statements
}
function_name() { statements }
大括号内的语句决定了函数的作用。函数名与函数的作用无关,但我们必须使函数名具有描述性。定义函数不会有任何作用。要执行函数定义中的命令,我们必须调用函数。
要在 Bash
中调用函数,我们使用函数的名称。
#! /bin/bash
greet(){
echo 'Hello, Folks. Welcome to DelftStack!'
}
greet
输出:
Hello, Folks. Welcome to DelftStack!
在这里,我们在一开始就用 greet
这个名字定义函数,然后调用函数。当我们调用函数的时候,函数定义里面的语句就会被执行,因此我们看到 Hello, Folks. Welcome to DelftStack!
在终端打印出来。
我们还可以使用另一种方法来定义函数:
#! /bin/bash
function greet(){
echo 'Hello, Folks. Welcome to DelftStack!'
}
greet
输出:
Hello, Folks. Welcome to DelftStack!
我们必须确保在调用函数之前,我们总是先定义函数。
Bash 中变量的作用域
在 Bash 中, 变量的作用域可以是全局的, 也可以是局部的. 然而, 变量的默认作用域总是全局的, 即使它是在函数作用域内声明的. 我们必须使用 local
关键字来使一个变量成为局部变量。
#! /bin/bash
gvar1=1
gvar2=2
change_variables() {
local gvar1=10
gvar2=7
echo "Inside Function: gvar1: $gvar1, gvar2: $gvar2"
}
echo "Before executing function: gvar1: $gvar1, gvar2: $gvar2"
change_variables
echo "After executing function: gvar1: $gvar1, gvar2: $gvar2"
输出:
Before executing function: gvar1: 1, gvar2: 2
Inside Function: gvar1: 10, gvar2: 7
After executing function: gvar1: 1, gvar2: 7
在这里,声明在顶部的 gvar1
和 gvar2
是全局变量。
在函数内部,由于我们对 gvar1
使用了 local
关键字,所以 gvar1
被声明为一个局部变量,而 gvar2
仍然是一个全局变量,因为它没有 local
关键字。因此,gvar2
的值是由函数全局改变的,而 gvar1
的值只在函数内部改变。
Bash 中函数的返回值
与其他编程语言相反,Bash 不允许我们从函数中返回值。Bash 函数返回的值是函数中最后一条语句的执行状态。数字 0
代表成功,而从 1-255
代表失败。我们可以用 return
关键字来指定函数的退出状态。return
语句也会终止函数的执行。
#! /bin/bash
return_value(){
echo "This function returns 20!"
return 30
echo "After return statement"
}
return_value
echo $?
输出:
This function returns 20!
30
在这里,我们可以看到,函数 return_value
使用 return
语句返回值 30
,该值被分配到 $?
变量。
我们还可以注意到,在执行完 return
语句后,函数就终止了,因为 return
语句下面的命令不会被执行。
如果我们想从函数中返回某个值,我们可以将该值赋给一个全局变量,然后从函数外部访问该变量来检索该值。
#! /bin/bash
send_message(){
message_from_function="Hello From the function!"
}
send_message
echo $message_from_function
输出:
Hello From the function!
在程序中,我们把要返回的值分配给全局变量 message_from_function
,然后访问该变量的返回值。
向 Bash 函数传递参数
要将参数传递给一个 Bash 函数,我们只需将参数放在函数后面即可。如果我们想向一个函数传递多个参数,我们可以用空格将参数分开。为了避免参数的误码,我们可以用双引号来包裹参数。
根据参数的位置用 $1
、$2
等方式访问。$0
代表函数名称,而 $#
则表示函数中位置参数的数量。
#! /bin/bash
send_message(){
message_from_function="Hello $1 "
}
send_message
echo $message_from_function "Delft!"
输出:
Hello Delft!
在这里,参数 Delft!
被传入函数,并在函数中通过参数 $1
访问,我们得到 Hello Delft!
作为函数的最终输出。
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn