实现本地功能 [英] Achieve Local Function

查看:29
本文介绍了实现本地功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要尝试实现的目标是在函数中创建本地函数。同时,本地函数不会覆盖外部函数。下面是简单函数和带参数的嵌套函数的示例,以说明我的问题。

#!/bin/bash
usage() #<------------------------------- same function name
{
    echo "Overall Usage"
}

function_A()
{
    usage() #<--------------------------- same function name
    {
        echo "function_A Usage"
    }

    for i in "$@"; do
        case $i in
            --help)
                usage
                shift
                ;;
            *)
                echo "flag provided but not defined: ${i%%=*}"
                echo "See '$0 --help'."
                exit 0
            ;;
        esac
    done
}

function_A --help
usage

这里是输出。

function_A Usage
function_A Usage

但我想要的是

function_A Usage
Overall Usage
是否可以在不更改其(功能)名称和顺序的情况下实现?请?

注意:我尝试了local usage(),但它似乎不适用于函数。

推荐答案

bash不支持本地函数,但根据您的特定脚本和体系结构,您可以通过子Shell控制函数名称的范围。

通过将定义中的{..}替换为(..),您将获得所需的输出。usage的新定义将仅限于函数,但变量的任何更改也将如此:

#!/bin/bash
usage() 
{
    echo "Overall Usage"
}

function_A()
(                  # <-- Use subshell
    usage()
    {
        echo "function_A Usage"
    }

    for i in "$@"; do
        case $i in
            --help)
                usage
                shift
                ;;
            *)
                echo "flag provided but not defined: ${i%%=*}"
                echo "See '$0 --help'."
                exit 0
            ;;
        esac
    done
)

function_A --help
usage

这篇关于实现本地功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆