国际访客建议访问 Primers 编程伙伴 国际版站点 > Bash 教程 > 函数 以获得更好的体验。

# 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-11-27 09:38:13 创建于: 2025-11-27 09:38:13