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

Case语句无法导出变量问题求助(非程序员新手)

问题分析与解决

核心问题:Case匹配模式错误

你代码里的[OpenGrADS]*写法是错的——方括号[]是单个字符的匹配集合(比如[abc]是匹配a、b、c中的任意一个字符),不是用来匹配完整字符串前缀的。所以不管用户输入"OpenGrADS"还是"GrADS",都不会触发对应的case分支,变量GRADS_PICK根本没被赋值,自然没法导出返回。

修正后的代码

############################# Chose GrADS or OpenGrADS #########################
while true; do
  read -p "Would you like to install OpenGrADS or GrADS? (OpenGrADS/GrADS)" yn
  case $yn in
    OpenGrADS* )
      export GRADS_PICK=1    #variable set for grads or opengrads choice
      break
      ;;
    GrADS* )
      export GRADS_PICK=2   #variable set for grads or opengrads choice
      break
      ;;
    * )
      echo " "
      echo "Please answer OpenGrADS or GrADS (case sensitive)."
      ;;
  esac
done

额外注意事项

  • 如果你的脚本是通过./your_script.sh运行的,这会启动一个子shell,子shell里export的变量不会传递回父shell。要让变量在当前shell生效,得用source ./your_script.sh或者. ./your_script.sh(点+空格+脚本路径)来执行。
  • 如果你想让输入不区分大小写(更友好),可以把输入转成小写后匹配,比如修改成:
    read -p "Would you like to install OpenGrADS or GrADS? (OpenGrADS/GrADS)" yn
    yn_lower=$(echo "$yn" | tr '[:upper:]' '[:lower:]')
    case $yn_lower in
      opengrads* )
        export GRADS_PICK=1
        break
        ;;
      grads* )
        export GRADS_PICK=2
        break
        ;;
      * )
        echo " "
        echo "Please answer OpenGrADS or GrADS."
        ;;
    esac
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:10:46