BASH返回主函数

BASH返回主函数

我有一个调用函数的 BASH 脚本,该函数又调用其他函数:

#!/bin/bash
function foo
{
    function bar
    {
        # do something
    }
    bar
}
foo

如何直接返回bar主函数?情况是bar处理用户输入,如果收到否定答案,则必须返回到 main 函数,否则必须返回到foo.

回归foo并不是简单一句话的问题return。对于另一个,我尝试了这个(实际上有效):

#!/bin/bash
function foo
{
    function bar
    {
        if [negative] # abstract statement
        then return 1
        else return 0
        fi
    }
    ! bar && return
}
foo

但是由于我有像foo分布在整个项目中的函数(bar在头文件中定义),有没有一种方法只需要修改bar?该项目大约有 2k 行长,由多个文件组成,如果有解决方案的话会容易得多。

答案1

(我知道)没有什么好的方法可以做到这一点,但如果你愿意付出代价......

您可以将代码放入您源文件中,而不是将代码放入函数中。如果函数需要参数,那么您必须使用以下方法准备它们set

set -- arg1 arg2 arg3
source ...

三个文件:

  1. 测试脚本.sh

    #! /bin/bash
    
    startdir="$PWD"
    
    echo mainscript
    
    while true; do
            echo "begin: helper loop"
            source "${startdir}/func_1"
            echo "end: helper loop"
            break
    done
    
    echo mainscript
    
  2. 函数_1

    echo "begin: func_1"
    source "${startdir}/func_2"
    echo "end: func_1"
    
  3. 函数_2

    echo "begin: func_2"
    echo break from func_2
    break 100
    echo "end: func_2"
    

结果:

> ./testscript.sh
mainscript
begin: helper loop
begin: func_1
begin: func_2
break from func_2
mainscript

相关内容