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

Bash脚本多read命令引发expr语法错误,请求排查解决

问题分析与解决方案

错误原因1:expr运算符转义错误

你在expr中转义运算符时多添加了空格,比如\ +会被Shell解析为带空格的+参数,导致expr无法正确识别运算符,抛出syntax error。正确的转义方式是直接在运算符前加反斜杠,不需要额外空格。

错误原因2:一次性输入多值的输出异常

当你一次性输入「1 1 1」时,三个read命令会依次读取这三个值(n=1、a=1、b=1),但因为expr的语法错误,计算部分执行失败,所以只输出了1+1 =而没有结果。

修复后的脚本

方案1:修正expr的转义写法

#!/bin/bash
echo "1.Addition 2.Subtraction 3.Multiplication 4.Division"
read n
echo "Enter the operends"
read a
read b
case $n in
"1") echo "$a+$b =`expr $a \+ $b`";;;
"2") echo "$a-$b=`expr $a \- $b`";;;
"3") echo "$a*$b=`expr $a \* $b`";;;
"4") echo "$a/$b=`expr $a \/ $b`";;;
esac

方案2:使用Bash内置算术扩展(更推荐)

Bash支持$((...))进行算术运算,无需依赖expr,也不需要转义运算符,简洁且可靠:

#!/bin/bash
echo "1.Addition 2.Subtraction 3.Multiplication 4.Division"
read n
echo "Enter the operends"
read a
read b
case $n in
"1") echo "$a+$b = $((a + b))";;;
"2") echo "$a-$b = $((a - b))";;;
"3") echo "$a*$b = $((a * b))";;;
"4") echo "$a/$b = $((a / b))";;;
esac

验证效果

  • 依次输入1、1、1时,会输出1+1 = 2
  • 一次性输入1 1 1时,脚本会自动分配n=1、a=1、b=1,同样输出1+1 = 2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:45:45