let 是 Bash 的一个内置命令,用于在 Shell 中进行整数运算。虽然它不是 POSIX 标准的一部分,且在现代化脚本中常被 (( ... )) 替代,但了解它依然有助于理解旧脚本或进行一些简单的操作。
📜 基本语法与规则
- 基础语法 :let 表达式。计算后,其结果不会自动显示,通常需配合 echo 打印。如果表达式包含空格或 |, &, > 等特殊字符,必须用双引号(" ")或单引号(' ')将其括起来。
- 变量引用 :在 let 命令中引用变量时,不需要加 $ 符号。例如,let "sum = a + b" 能直接识别变量 a 和 b 的值。
- 运算范围 :let 仅支持整数运算 。当它处理除法时,结果会直接截断取整,不保留小数。若需浮点运算,可用 bc 或 awk 工具。
➕ 支持的运算符
let 支持一套丰富的算术、逻辑和位运算符,优先级从高到低排列如下:
| 优先级 | 运算符类型 | 运算符 | 描述 | 示例 |
|---|---|---|---|---|
| 高 | 自增/自减 | var++ var-- | 后置自增/减:先返回变量值,再执行运算。 | let b=a++ (若a=5,则b=5, a=6) |
| ++var --var | 前置自增/减:先执行运算,再返回新值。 | let b=++a (若a=5,则a=6, b=6) | ||
| 一元运算 | +, -, !, ~ | 正负号、逻辑非、按位取反。 | let "b = -a" | |
| 幂运算 | ** | 乘方。 | let "b = 2 ** 3" (结果为8) | |
| 乘除取模 | *, /, % | 乘法、除法、取模。 | let "b = 10 % 3" (结果为1) | |
| 加减法 | +, - | 加法、减法。 | let "b = a + 5" | |
| 移位 | <<, >> | 按位左移、右移。 | let "b = a << 2" | |
| 比较 | <, >, <=, >= | 小于、大于、小于等于、大于等于。 | let "b = a > 3" (若a>3,则b=1) | |
| (不)等于 | ==, != | 等于、不等于。 | let "b = a == 5" (若a==5,则b=1) | |
| 按位与/异或/或 | &, ^, | 对数字的二进制表示进行运算。 | ||
| 逻辑与/或 | &&, | |||
| 低 | 三元运算符 | expr?expr:expr | 条件判断,若为真取第一个值,否则取第二个。 | let "b = a>0 ? a : -a" |
| - | 复合赋值 | =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, | = | 运算并赋值。 |
💡 常用示例
- 变量自增 :使用 let "var += 1" 或 let "var++" 语句即可。
bash
#!/bin/bash
count=0
for i in {1..5}; do
let "count++"
done
echo "Total count: $count" #输出:Total count: 5
- 多表达式组合 :let 允许用空格分隔多个表达式,并依次计算。
bash
#计算x+y的和,再赋给z
x=10; y=20; z=0
let sum=x+y z=sum
echo $sum $z #输出:30 30