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

