首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash重复调用函数

Bash重复调用函数
EN

Stack Overflow用户
提问于 2016-01-17 20:22:21
回答 2查看 191关注 0票数 0

我正在使用bash版本3.2.57(1)-release (x86_64-apple-darwin14 14)

在用户决定退出之前,我如何反复调用函数?

如果我将函数放在顶部,在while循环中,则会调用该函数,但它将重复执行。

代码语言:javascript
复制
    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
EN

回答 2

Stack Overflow用户

发布于 2016-01-17 20:48:16

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

代码语言:javascript
复制
select answer in call_func quit; do
    case $answer in
        (call_func) call_func;;
        (quit) break;;
        ("") echo "Unknown option. Press return again to see available options.";;
    esac
done

使用上述脚本的示例会话:

代码语言:javascript
复制
1) call_func
2) quit
> 1
Im inside call_func
> 6
Unknown option. Press return again to see available options.
> 
1) call_func
2) quit
> 2

bash中的select关键字将自动为您设置一个编号菜单,并循环接收输入。它还将将用户提供的数字转换为为该数字提供的文本(本例中为call_funcquit )。

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

代码语言:javascript
复制
select VARIABLENAME in LIST OF ITEMS
do
    CODE
done

其中,VARIABLENAME是用户选择时要设置的变量,LIST OF ITEMS是要显示的选项列表,CODE是用户做出选择时要执行的代码。select构造是一个循环,因此它将一直执行到break

票数 0
EN

Stack Overflow用户

发布于 2016-01-17 20:36:57

如果我将函数放在顶部,在while循环中,则会调用该函数,但它将重复执行。

是啊。如果这样做是正确的,函数实际上应该在(外部) case语句之上。你的问题是:

代码语言:javascript
复制
    call_func
    case "asnwer" in
        q|Q) exit;;
    esac

这是正确的,但是在case块中使用的是字符串asnwer。您的意思是使用变量:

代码语言:javascript
复制
    call_func
    case $answer in
        q|Q) exit;;
    esac

完成此更改后,您应该能够通过键入"q“退出循环。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34843203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档