Shell 函数重载

Shell / Bash 本身是没有提供这个功能的,需要我们模拟实现


#!/bin/bash
 
# 重载一个函数
say_hi_anny() {
    echo "Hi, I'm anny, I love coding!"
}
 
say_hi() {
    local name=$1
    echo "Hi, I'm $name!"
}
 
main() {
    local name=$1
    # 关键是使用 type -t 来检查函数是否存在
    # type -t 名字:名字必须是命令/函数名,变量名不算
    if [[ "$(type -t "say_hi_$name")" == function ]]; then
        "say_hi_$name"
    else
        say_hi "$name"
    fi
}
 
main "anny"
main "bob"
main "charlie"