Claude Code 模型切换脚本 switch.sh 编写 背景Claude code 使用不同模型需要切换之前手动切换重命名 setting.json 和环境变量修改想着切换麻烦编写个脚本吧用 claude code 编写。基本流程是将 settings-model.json 复制为 settings-json。修改 .zshrc 环境变量追加对应的 TOKE_URL 和 BASE_URL 。描述完整的需求后等着编写完成。切换脚本#!/usr/bin/env bashset-euopipefailCLAUDE_DIR/Users/xxx/.claudeZSHRC$HOME/.zshrcusage(){echo用法:$0ofo|xiaomu|deepseek|moz|minimaxexit1}[$#-ne1]usageTOKEN_TYPE$1case$TOKEN_TYPEinofo|xiaomu|deepseek|moz|minimax);;*)echo不支持的类型:$TOKEN_TYPE;usage;;esacSRC$CLAUDE_DIR/settings-${TOKEN_TYPE}.jsonDST$CLAUDE_DIR/settings.jsonif[!-f$SRC];thenecho找不到配置文件:$SRCexit1fi# 1. 拷贝配置文件cp$SRC$DSTecho已复制$SRC-$DST# 2. 从 settings.json 解析 ANTHROPIC_AUTH_TOKEN 和 ANTHROPIC_BASE_URLAPI_KEY$(python3-cimport json,sys;djson.load(open($DST));print(d[env][ANTHROPIC_AUTH_TOKEN])) BASE_URL$(python3-cimport json,sys;djson.load(open($DST)); print(d[env][ANTHROPIC_BASE_URL]))if[-z$API_KEY]||[-z$BASE_URL];thenecho解析 settings.json 失败ANTHROPIC_AUTH_TOKEN 或 ANTHROPIC_BASE_URL 为空exit1fiechoAPI_KEY:${API_KEY:0:8}...echoBASE_URL:$BASE_URL# 3. 删除 ~/.zshrc 中已有的相关行再追加新值保证幂等sed-i/^export ANTHROPIC_API_KEY/d$ZSHRCsed-i/^export ANTHROPIC_BASE_URL/d$ZSHRCsed-i/^# Config for claude code/d$ZSHRC{echo# Config for claude code, model type is$1.echoexport ANTHROPIC_API_KEY${API_KEY}echoexport ANTHROPIC_BASE_URL\${BASE_URL}\}$ZSHRCecho已更新$ZSHRC# 4. 在当前进程直接导出变量source ~/.zshrc 在 bash 里会触发 zsh 专属命令报错exportANTHROPIC_API_KEY$API_KEYexportANTHROPIC_BASE_URL$BASE_URLecho切换完成:$TOKEN_TYPEecho注意: 新终端窗口会自动从 ~/.zshrc 读取当前窗口已通过 export 生效脚本学习脚本写的很好运行了一下可以完美完成不同模型供应商的切换脚本里面有两个语法没见过学习一下{ } 文件名称这对括号的作用是什么解释下这行命令 sed -i ‘’ ‘/^export ANTHROPIC_API_KEY/d’ “$ZSHRC” 的 /d是什么意思 。/d是 sed 的 delete 命令删除匹配到的行。sed-i/^export ANTHROPIC_API_KEY/d$ZSHRC部分含义-i 原地修改文件macOS 语法/^export ANTHROPIC_API_KEY/匹配以该内容开头的行d删除该行sed 基本结构[地址]命令地址选定范围命令决定操作。{ }命令分组与重定向{ }是 shell 的命令分组构造将多条命令的输出合并为一个整体统一重定向到文件。{echoline 1echoline 2date}file.txt等价于对每条命令单独追加但只打开一次文件更简洁高效。语法要求左括号后必须有空格{ echo而非{echo右括号前必须有分号或换行echo x; }或换行后}#在 sed 中不需要转义#不是 Shell 关键字只是注释符号且注释作用发生在 Shell 解析阶段。在sed -i命令里#出现在单引号内Shell 不解析引号内容因此不需要转义。sed-i/^#model type/dfile.txt#在 sed 正则里就是普通字符直接写即可。