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

求助解析一段Linux Shell脚本的执行原理(已知输出)

Linux Shell脚本执行原理与结果推导解析

先把原脚本贴出来:

#!/bin/sh
i=0
for a in 9 8 7 6 5 4
do
    j=1
    for b in 1 2 3 4
    do
        let "j+=2"
    done
    let "i+=1"
done
echo "i=$i j=$j"

咱们一步步拆解它的执行逻辑,搞清楚最终输出是怎么来的:

1. 初始状态

脚本第一行就给变量i赋值为0,这是整个脚本的起始状态。

2. 外层循环的执行次数

外层for循环遍历的是列表9 8 7 6 5 4,数一下就能知道这个列表有6个元素,所以外层循环会完整执行6次。

每次进入外层循环,第一件事就是把变量j重置为1——划重点:每次外层循环启动都会覆盖j的旧值,所以j的初始值在每一轮外层循环里都是1。

3. 内层循环的计算过程

内层for循环遍历的是列表1 2 3 4,一共4个元素,所以每轮外层循环里,内层循环会跑4次。

内层循环里只有一行核心代码:let "j+=2",意思是把j的数值加2,再重新赋值给j。咱们算一遍每次内层循环后j的变化:

  • 第1次内层循环:j = 1 + 2 = 3
  • 第2次内层循环:j = 3 + 2 = 5
  • 第3次内层循环:j = 5 + 2 = 7
  • 第4次内层循环:j = 7 + 2 = 9

所以每轮内层循环结束后,j的值都会固定变成9。

4. 外层循环对i的累加

内层循环跑完后,外层循环会执行let "i+=1",也就是把i的数值加1。因为外层循环要跑6次,i从初始的0开始累加,6次后i的值就是0 + 6 = 6。

5. 最终输出结果

当所有循环都执行完毕后,脚本执行echo "i=$i j=$j"。此时i的值是6,j的值是最后一轮外层循环里内层计算出的9,所以最终输出内容是:

i=6 j=9

这里补充个小知识点:在sh脚本里,默认定义的变量都是全局变量,所以哪怕j是在外层循环内部定义的,整个脚本都能访问到它,最后echo的时候才能输出j的最终值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:30:20