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

如何不依赖bc工具在Bash中开发支持多参数的高级计算器

完整可运行实现方案

#!/bin/bash

# 输入合法性校验:参数必须为奇数(数字、运算符交替出现)
if (( $# % 2 == 0 )); then
    echo "输入错误:参数应为数字和运算符交替的奇数个,示例:./calc.sh 2 + 3 * 7 - 2 ^ 3"
    exit 1
fi

# 按优先级从高到低定义运算符
operators=('^' '*' '/' '+' '-')
# 初始化运算数组
calc_arr=("$@")

# 按优先级遍历运算符
for op in "${operators[@]}"; do
    # 循环处理当前优先级的所有运算符
    while true; do
        # 查找当前运算符在数组中的索引
        op_index=-1
        for i in "${!calc_arr[@]}"; do
            if [[ "${calc_arr[$i]}" == "$op" ]]; then
                op_index=$i
                break
            fi
        done
        # 找不到当前运算符,退出循环处理下一个优先级
        if (( op_index == -1 )); then
            break
        fi
        # 取运算符左右的数字
        left_num=${calc_arr[op_index-1]}
        right_num=${calc_arr[op_index+1]}
        # 根据运算符计算结果
        case $op in
            '^') res=$(( left_num ** right_num )) ;;
            '*') res=$(( left_num * right_num )) ;;
            '/') res=$(( left_num / right_num )) ;;
            '+') res=$(( left_num + right_num )) ;;
            '-') res=$(( left_num - right_num )) ;;
        esac
        # 替换数组中的三个元素(左值、运算符、右值)为计算结果
        calc_arr=( "${calc_arr[@]:0:op_index-1}" "$res" "${calc_arr[@]:op_index+2}" )
    done
done

# 最终数组只剩一个元素,就是运算结果
echo "${calc_arr[0]}"

功能验证

  1. 异常输入校验:如果传入偶数个参数会直接报错提示
  2. 优先级运算支持:
    执行示例命令 ./calc.sh 2 + 3 * 7 - 2 ^ 3,输出结果为 15,符合运算规则
  3. 幂运算支持:执行./calc.sh 2 ^ 3 * 4,输出结果为32

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:27:06