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
相关产品推荐
相关产品推荐

