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

如何在Bash中根据脚本变量动态获取可执行路径 避免大量if判断

解决方案

以下是两种简洁的实现方式,可替代冗长的if-elif分支:

方法1:使用Bash关联数组(推荐,Bash 4.0+版本支持)

这是最贴近映射需求的实现,后续新增对应关系仅需添加一行键值配置,无需修改执行逻辑:

run() {
    # 声明关联数组,建立cur_num到可执行文件的一一映射
    declare -A exec_map=(
        ["0"]="$HOME/pathDirName0/execFile0"
        ["1"]="$HOME/pathDirName1/execFile1"
        ["2"]="$HOME/pathDirName2/execFile2"
        ["3"]="$HOME/pathDirName3/execFile3"
        ["4"]="$HOME/pathDirName4/execFile4"
        # 后续新增仅需在此添加配置即可,示例:["5"]="$HOME/xxx/xxx"
    )

    # 校验当前cur_num存在对应映射时执行程序
    if [[ -v exec_map[$cur_num] ]]; then
        ${exec_map[$cur_num]}
    fi
}

注:这里将路径中的~替换为了$HOME避免路径展开问题,不需要额外使用eval,安全性更高。

方法2:兼容旧版Bash的case实现

如果运行环境的Bash版本低于4.0不支持关联数组,可以用case语句简化分支结构,可读性远高于多层if-elif:

run() {
    case "$cur_num" in
        "0") ~/pathDirName0/execFile0 ;;
        "1") ~/pathDirName1/execFile1 ;;
        "2") ~/pathDirName2/execFile2 ;;
        "3") ~/pathDirName3/execFile3 ;;
        "4") ~/pathDirName4/execFile4 ;;
        # 后续新增分支仅需在此添加对应规则即可
    esac
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:15:00