Linux中数值运算需显式触发:$((...))最常用,支持整数四则、取模、幂等;let适合赋值;declare -i声明整型变量可自动解析赋值;小数运算须用bc或awk。

Linux 中对数值变量做算术运算,关键在于区分变量类型和选择合适工具。Shell 默认把所有变量当字符串处理,直接写 a=10; b=5; c=$a+$b 得到的是字符串 10+5,不是结果 15。必须显式触发数值计算。
用 $((...)) 直接计算(推荐)
这是最常用、最简洁的方式,支持整数四则、取模、幂运算、自增/自减,语法接近 C 语言:
-
a=12; b=5; echo $((a + b))→ 输出17 -
echo $((a * 2 - 3))→ 输出21 -
echo $((a % b))→ 输出2(取余) -
echo $((a ** 2))→ 输出144(平方) -
echo $((a++))先返回12,再让a变成13
用 let 命令赋值或更新
let 是内置命令,适合在不输出结果的情况下做运算和赋值:
-
a=8; let a=a+2→a变为10 -
let a+=3等价于let a=a+3 -
let "a = b * c"表达式带空格时建议加引号
用 declare -i 声明整型变量
声明后,后续对该变量的赋值会自动按整数解析(但不改变已有字符串值):
declare -i x=10 y=3-
x=y*4→x自动变成12(无需$((...))) -
x="15+6"→x会算出21(自动求值) - 注意:
declare -i只影响赋值行为,不支持小数
需要小数运算?用 bc 或 awk
$((...))、let、expr 都只支持整数。要算 3.14 × 2.5 或开方、保留小数位,必须用外部工具:
-
echo "scale=2; 3.14 * 2.5" | bc→ 输出7.85 -
echo "sqrt(81)" | bc -l→ 输出9.00000000000000000000(-l加载数学库) -
awk 'BEGIN{print 10/3}'→ 输出3.33333 -
awk -v a=12 -v b=5 'BEGIN{print a/b}'→ 把 Shell 变量传给 awk 计算


















