- 算术结果:通过变量赋值存储
- 退出状态码:表示运算的真假性(非0为真,0为假)
let
如何”返回值”?
算术结果通过变量传递
let
将计算结果直接赋给变量,而非打印到终端。
示例:
let "sum=5+3" # 计算5+3,结果存入变量sum echo $sum # 输出8
退出状态码表示逻辑真假
- 规则:
- 若计算结果 ≠0 → 退出状态码 0(Shell中0表示”真”或”成功”)
- 若计算结果 =0 → 退出状态码 1(表示”假”或”失败”)
- 用途:直接用于条件判断
if let "5 > 3"; then echo "5大于3" # 因5>3为真(结果=1≠0),状态码=0,触发此分支 fi
关键用例详解
用例1:赋值与结果获取
let "count=10*2" # 计算10*2=20,存入count echo $count # 输出20
用例2:条件判断
let "result=5-5" # 计算5-5=0 if let "result"; then echo "非零值" # 不会执行(result=0 → 状态码=1) else echo "零值" # 执行此分支 fi
用例3:自增/自减操作
i=5 let "i++" # i=6 let "j=--i" # 先减1再赋值 → i=5, j=5
常见误区
-
错误期待返回值
# 错误!let不会打印结果 output=$(let "3+2") # 输出为空
正确做法:
let "output=3+2" # 结果存入变量 echo $output # 输出5
-
混淆状态码与计算结果
let "num=0" # 状态码=1(因为结果为0) echo $? # 输出1(状态码),不是计算结果!
替代方案(更推荐)
现代脚本中,推荐使用或语法:
sum=$((5+3)) # 结果赋值更直观 ((5>3)) && echo "成立" # 逻辑判断更简洁
优势:
- 无需
let
显式声明 - 避免状态码的逆向逻辑(中非0即真)
- 兼容性更好(符合POSIX标准)
机制 | 作用 | 示例 |
---|---|---|
变量赋值 | 存储算术结果 | let "res=5*2" → res=10 |
退出状态码 | 表示表达式是否非零(非0=真) | let "5-3" → 状态码=0 |
引用说明:本文内容基于Bash 5.0+手册(GNU官方文档)及POSIX Shell标准,经实践验证。
let
是Bash内建命令,不同Shell实现可能略有差异。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6250.html