Bash脚本判断输入为y/n时报attempted assignment to non-variable错误如何解决
报错原因
(( ... ))是Bash专属的整数算术运算语法,仅支持整数类的计算与判断,完全不支持字符串比较操作,这是报错的核心诱因。- 在
(( ... ))的算术语境中,=是赋值运算符而非相等判断符,就算是整数场景下做相等判断也应该用==,但就算修改为==,算术语法也无法处理字符串匹配,依旧会报错。你遇到的报错提示就是因为语法解析时把=识别为赋值操作,尝试给展开后的字符串值(不是变量)赋值触发的。
修复方案
你可以使用Bash支持字符串比较的[[ ... ]]扩展测试语法替换原有的算术语法,同时将=改为相等判断符==,修改后可正常运行的代码如下:
#! /bin/bash # 加-r参数避免read对输入的反斜杠做转义处理,属于通用最佳实践 read -r word if [[ $word == "y" || $word == "Y" ]] then echo "YES" elif [[ $word == "n" || $word == "N" ]] then echo "NO" fi
你也可以用更适配多分支匹配的case语句简化代码,写法更简洁直观:
#! /bin/bash read -r word case $word in [Yy]) echo "YES" ;; [Nn]) echo "NO" ;; esac
内容的提问来源于stack exchange,提问作者vatsal mangukiya
相关产品推荐
相关产品推荐

