BASH脚本中select与case语句的参数传递问题排查
Bash Select语句参数传递问题解决方法
默认情况下,select语句会将用户输入的完整内容存储在REPLY变量中,而$var仅代表选中的选项文本(比如输入2 file1时,var是type)。你脚本里的$2是脚本本身的位置参数,并非用户输入的后续参数,因此无法获取到file1。
修改后的脚本
NAME="Mark Zuck" PS3="enter command: " select var in author type exit do # 提取用户输入中选项后的所有参数 args="${REPLY#* }" case $var in author) echo "$NAME" ;; type) if [ -n "$args" ]; then cat "$args" else echo "请指定要查看的文件路径" fi ;; exit) exit ;; *) echo "无效选项,请输入1-3之间的数字" ;; esac done
关键修改说明
${REPLY#* }:Bash参数扩展语法,删除REPLY变量中第一个空格及之前的内容,提取出用户输入的参数(比如输入2 file1时,得到file1)。- 参数判断:选择
type但未指定文件时给出提示,避免cat因无参数陷入等待。 - 无效选项处理:对非1-3的输入进行提示,提升脚本可用性。
执行验证
运行修改后的脚本,输入2 file1即可正常输出file1的内容。
内容的提问来源于stack exchange,提问作者Murat Zamir
相关产品推荐
相关产品推荐

