Bash反复调用函数

Bash反复调用函数,bash,input,while-loop,user-input,repeat,Bash,Input,While Loop,User Input,Repeat,Im使用bash版本3.2.57(1)-发布版(x86_64-apple-darwin14) 如何重复调用函数直到用户决定退出 如果我将函数放在while循环的顶部,就会调用它,但它会重复执行 call_func () { echo "Im inside call_func" echo "some text: " >> file.txt } while true do echo

Im使用bash版本3.2.57(1)-发布版(x86_64-apple-darwin14)

如何重复调用函数直到用户决定退出

如果我将函数放在while循环的顶部,就会调用它,但它会重复执行

    call_func () {
            echo "Im inside call_func"
            echo "some text: " >> file.txt

    }

    while true
    do
            echo "1) call_func "
            echo "q) to quit"
            echo "\n"
            echo "Enter your selection \c"
            read answer

            case "$asnwer" in
                    q|Q) exit;;
            call_func 
    esac
    done
如果我将函数放在while循环的顶部,就会调用它,但它会重复执行

    call_func () {
            echo "Im inside call_func"
            echo "some text: " >> file.txt

    }

    while true
    do
            echo "1) call_func "
            echo "q) to quit"
            echo "\n"
            echo "Enter your selection \c"
            read answer

            case "$asnwer" in
                    q|Q) exit;;
            call_func 
    esac
    done
是的。您做得对,函数确实应该位于
case
语句的上方(外部)。你的问题是:

调用函数 中的“asnwer”一案 q | q)退出;; 以撒 这是正确的,但是您在case块中使用了字符串
asnwer
。您打算使用变量:

调用函数 案例$ q | q)退出;; 以撒
进行此更改后,您应该能够通过键入“q”正确地退出循环。

我之前的回答涵盖了如何修复现有代码,这里我将推荐一种更好的方法(考虑到您具体使用的是
bash
):

在call\u func quit中选择应答;做
案例$
(call_func)call_func;;
(退出)休息;;
(“”)echo“未知选项。再次按回车键查看可用选项。”;;
以撒
完成
使用上述脚本的示例会话:

1)调用函数
2) 退出
> 1
我是内线电话
> 6
未知选项。再次按return可查看可用选项。
> 
1) 调用函数
2) 退出
> 2
bash中的
select
关键字将自动为您设置一个编号菜单,并循环接收输入。它还将用户提供的号码转换为该号码提供的文本(
call_func
quit

select
记录在bash手册页中,但基本上由三部分组成:

在项目列表中选择VARIABLENAME
做
密码
完成

其中,
VARIABLENAME
是用户做出选择时要设置的变量,
LIST OF ITEMS
是要显示的选择列表,
code
是用户做出选择时要执行的代码。
select
构造是一个循环,因此它将一直执行,直到您在推荐阅读:
help break
中的
case“$answer”应该是
?我相信它解决了问题提出的问题,正如问题作者所期望的那样。如果不是这样,请向我说明。该函数仅在第一次调用时才被调用,当该函数完成并且用户再次选择该函数时,它不会再次被调用。我的实际函数正在调用另一个函数。这与此有关吗?如果多次调用函数时遇到问题,是否可以显示该函数的代码(编辑到问题中)?我认为问题可能出在功能上。