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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:06:06