You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BASH中select菜单结合if语句失效求助:仅输出周一内容

问题分析与解决

你遇到的问题核心是Bash中test命令([)的比较语法错误:

在[的判断逻辑里,==两边必须用空格分隔,否则整个$day==monday会被当成一个完整的非空字符串。而test命令对非空字符串的判定永远为真,所以第一个if分支会一直触发,不管你实际选择了什么选项。

修正后的脚本

把每个判断条件里的==前后加上空格,同时给变量和匹配字符串加上双引号(这是Bash脚本的好习惯,能避免变量为空时出现语法错误):

select day in monday tuesday wednesday thursday friday saturday sunday;
do
    echo "当前选择:$day"
    if [ "$day" == "monday" ]; then
        echo "need a lot of coffee"
    elif [ "$day" == "tuesday" ]; then
        echo "need even more coffee"
    elif [ "$day" == "wednesday" ]; then
        echo "need something stronger"
    elif [ "$day" == "thursday" ]; then
        echo "need tequila"
    elif [ "$day" == "friday" ]; then
        echo "regret thursday"
    elif [ "$day" == "saturday" ]; then
        echo "go for a run"
    else
        echo "try not to think about tomorrow"
    fi
done

为什么case语句没问题?

case语句的语法是基于模式匹配,它的判断逻辑和test命令完全不同,不需要严格的空格分隔要求,所以你用case实现的版本能正常工作。

内容的提问来源于stack exchange,提问作者Satopu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 23:27:03