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

Bash脚本变量运算问题求助:含整数与非整数运算需求

解决Bash变量运算的两个核心问题

首先看你第一个脚本的报错,根源有两个:脚本文件带Windows换行符,以及算术表达式的写法错误。

1. 先解决换行符问题

从bash -x的输出能看到a=$'20\r'和b=$'25\r',这里的\r是Windows系统的回车符(Unix/Linux只用\n当换行),Bash会把20\r当成一个完整的命令名,自然找不到这个命令。

修复方法:

  • 用dos2unix工具转换文件格式:
    dos2unix test1
    
  • 如果没有dos2unix,用sed手动去掉回车符:
    sed -i 's/\r$//' test1
    

2. 修正Bash算术运算的写法

你原来的echo $( ("$a" + "$b") )写法不对,Bash里的整数算术扩展应该用$((...))语法,不需要额外的子shell括号,也不用给变量加引号(算术上下文里变量会自动解析)。

修正后的第一个脚本:

#!/bin/bash
a=20
b=25
echo $((a + b))

执行后会输出45,完全正常。

3. 实现带除法的浮点运算

你第二个脚本想做a + b / 100,如果用Bash原生的整数运算,25/100会被取整为0,结果是20,这显然不是你想要的。这时候需要用bc来处理浮点运算:

方法1:用bc指定精度

#!/bin/bash
a=20
b=25
# scale=2表示保留2位小数,你可以根据需求调整
echo "scale=2; $a + $b / 100" | bc

执行后输出20.25。

方法2:用awk实现(可选)

如果你习惯用awk,也可以这样写:

#!/bin/bash
a=20
b=25
awk -v a="$a" -v b="$b" 'BEGIN{print a + b / 100}'

同样会输出20.25。

额外提示

  • 写Bash脚本时,尽量用Unix格式保存(编辑器里选LF换行),避免再出现\r的问题。
  • 整数运算优先用$((...)),简单高效;浮点运算再考虑bc/awk这类工具。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:22:21