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
相关产品推荐
相关产品推荐

