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

Bash脚本Select传值至Case异常问题排查求助

Bash脚本Select-Case匹配问题排查

问题现象

使用select选择城市后,只有选择"New York"时能正确返回"country: USA",选择其他选项均返回"unknown"。原脚本及输出如下:

原脚本代码

#!/bin/bash

select country in Switzerland, "Los Angeles", Moscow, Paris, London, Dubai, "New York";

do

case $country in

 "Los Angeles" | "New York")
    echo -n "country: USA"
    ;; 

  Paris)
    echo -n "country: London"
    ;; 

  "Dubai" )
    echo -n "Country: Abu-Dhabi"
    ;; 

  *)
    echo -n "unknown"
    ;; 

esac
done

错误输出示例

选择"Los Angeles"时:

1) Switzerland,
2) Los Angeles,
3) Moscow,
4) Paris,
5) London,
6) Dubai,
7) New York
#? 2
unknown#?

错误原因

核心问题是**select选项里的元素带了多余的逗号**:

  • 除了最后一个选项"New York",其他选项末尾都加了逗号(比如Switzerland,、"Los Angeles",)
  • 但case语句里匹配的是不带逗号的字符串(比如"Los Angeles"),导致实际选中的值和匹配条件不匹配,触发默认的*)分支返回"unknown"

另外还有两处输出错误:

  • Paris对应的国家应该是France,不是London
  • Dubai对应的国家应该是UAE(阿拉伯联合酋长国),不是Abu-Dhabi(阿布扎比是阿联酋的首都)

修正后的脚本

#!/bin/bash

# 去掉选项末尾的逗号,每个选项用空格分隔
select city in Switzerland "Los Angeles" Moscow Paris London Dubai "New York";
do
    case $city in
        "Los Angeles" | "New York")
            echo "country: USA"
            ;;
        Paris)
            echo "country: France"
            ;;
        London)
            echo "country: UK"
            ;;
        Moscow)
            echo "country: Russia"
            ;;
        Switzerland)
            echo "country: Switzerland"
            ;;
        Dubai)
            echo "country: UAE"
            ;;
        *)
            echo "unknown"
            ;;
    esac
done

测试效果

选择"Los Angeles"时:

1) Switzerland
2) Los Angeles
3) Moscow
4) Paris
5) London
6) Dubai
7) New York
#? 2
country: USA
#?

选择Paris时:

#? 4
country: France
#?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:45:42