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

macOS zsh下求二次方程根的Shell脚本报错及sqrt函数安装问题

问题解答

1. 语法错误的原因

  • Zsh 原生的整数算术扩展语法$((...))仅支持基础整数运算,既没有内置sqrt()函数,也不支持在算术块内直接调用外部函数,你写入的sqrt($Dis)会被解析为无效语法符号,连带后续的-、+运算符也会被识别为非法 token,触发语法报错。
  • count=3 分支的报错来源于expr语法错误:expr命令中的括号属于特殊控制字符,必须加反斜杠转义才能作为运算符号使用,你写的(-b)会被Shell优先识别为子shell调用逻辑,而非算术运算表达式,因此触发语法错误。

2. 平方根计算的实现方法

macOS 系统默认自带bc命令(一款支持浮点运算的计算器工具),加载其内置的数学库即可直接调用sqrt()函数,无需额外安装第三方工具。


修正后的可用脚本

echo "Enter A in Quadratic equation Ax^2+Bx+C=0"
read a
echo "Enter B"
read b
echo "Enter C"
read c
count=0
Dis=$((b * b - 4 * a * c))

if [ $Dis -gt 0 ]
then
count=1
elif [ $Dis -lt 0 ]
then
count=2
else
count=3
fi

case "$count" in
"1")
# scale参数用于指定计算结果保留的小数位数,可按需调整
root1=$(echo "scale=2; (-$b - sqrt($Dis)) / (2 * $a)" | bc -l)
root2=$(echo "scale=2; (-$b + sqrt($Dis)) / (2 * $a)" | bc -l)
echo "The roots are:"
echo $root1
echo $root2
;;
"2")
echo "Roots are imaginary"
;;
"3")
root=$(echo "scale=2; (-$b) / (2 * $a)" | bc -l)
echo "The singular root is:"
echo $root
;;
esac

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:36:03