如何在Bash中无需if分支,通过映射实现灵活的GCC版本切换
用Bash关联数组搞定GCC版本切换
完全可以用Bash的关联数组做版本与路径的映射,彻底摆脱if分支,既优雅又灵活,后续加新版本直接在数组里加一行就行,维护起来超方便。
具体实现代码:
# 先定义GCC版本到路径的映射数组,按需修改路径和版本 declare -A GCC_PATHS=( ["7"]="/usr/local/gcc-7.5.0/bin" ["8"]="/usr/local/gcc-8.4.0/bin" ["10"]="/usr/local/gcc-10.3.0/bin" ["12"]="/usr/local/gcc-12.2.0/bin" ) gcc_switch() { # 没传参数或者版本不存在时,提示支持的版本 if [[ $# -eq 0 || -z "${GCC_PATHS[$1]}" ]]; then echo "可用GCC版本:${!GCC_PATHS[*]}" return 1 fi # 清理PATH里已有的GCC路径,避免版本冲突 export PATH=$(echo "$PATH" | awk -v RS=':' -v ORS=':' '/gcc/ {next} {print}' | sed 's/:$//') # 把目标版本路径放到PATH最前面,确保优先使用 export PATH="${GCC_PATHS[$1]}:$PATH" # 验证切换结果 echo "已切换到GCC $1,当前版本:$(gcc --version | head -n1)" }
使用方式:
- 切换到指定版本:比如切换到GCC 10,直接敲
gcc_switch 10 - 查看支持的版本:输入
gcc_switch不带参数即可
注意点:
- 把这段代码加到
~/.bashrc或者专门的shell配置文件里,重新加载配置后就能全局调用 - 新增版本只需要在
GCC_PATHS数组里加一行,比如["13"]="/usr/local/gcc-13.1.0/bin" - 清理PATH的步骤是为了防止之前的GCC路径干扰,保证切换后的版本是优先被调用的
内容的提问来源于stack exchange,提问作者user20585775
相关产品推荐
相关产品推荐

