1318

7 分钟

#Bash 的函数

函数(Function)是可以重复调用的代码片段,在 Bash 中定义和调用函数的语法如下:

# 定义函数 function 函数名() { 命令 命令 ... } # 调用函数 函数名 参数1 参数2 ...
  • function 可以省略
  • 在函数内部(下同),使用 $# 获取参数个数
  • 使用 #@ 获取全部参数
  • 使用 $1 获取 参数1$2 获取 参数2,以此类推
    • 如果参数大于 9 个,则第 10 个参数以 ${10} 的形式读取参数,以此类推

示例:

# 定义函数 function greet() { echo "你好 $1" } # 调用函数 greet 史蒂夫

运行结果:

你好 史蒂夫

#删除函数

可以使用 unset 命令删除函数:

unset -f 函数名

例如:

unset -f greet

#return 命令

使用 return 命令可以使函数不再继续执行,提前返回。

示例:

# 定义函数 function eat() { if [ "$1" = "青椒" ]; then echo "不吃 $1" return 1 # 返回 fi echo "吃 $1" } # 调用函数 eat 牛肉 eat 青椒 eat 橘子

运行结果:

吃 牛肉 不吃 青椒 吃 橘子

#局部变量

在 Bash 中直接定义的变量属于全局变量,即使在函数内部;定义局部变量需要使用 local 命令。

示例:

# 定义函数 function greet() { NAME="$1" # NAME 是全局变量 echo "你好 $NAME" } # 调用函数 greet 史蒂夫 # 查看变量 echo NAME:$NAME # NAME 是全局变量,仍有效 # 定义函数 function eat() { local FOOD="$1" # FOOD 是局部变量 echo "吃 $FOOD" } # 调用函数 eat 菠萝 # 查看变量 echo FOOD:$FOOD # FOOD 是局部变量,已失效

运行结果:

你好 史蒂夫 NAME:史蒂夫 吃 菠萝 FOOD:
  • 在执行完 greet 函数后,全局变量 NAME 仍然有效
  • 在执行完 eat 函数后,局部变量 FOOD 已经失效

创建于 2025/9/18

更新于 2025/9/18