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
相关产品推荐
相关产品推荐

