envsetup.sh分析----gettop

本文详细解读envsetup.sh中关键片段,涉及局部变量声明、条件判断、路径操作和函数调用,教你理解如何通过shell脚本寻找Android项目核心文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是分析envsetup.sh的第一篇。自己对于shell脚本是一知半解,想借此了解更多。

方式是选取部分代码并记录自己的理解。

1.

local TOPFILE=build/make/core/envsetup.mk

local用来声明在函数内部的局部变量(local的用法可能不止这个)

注意声明语句中等号的左右不能有空格,不像其他的编程语句

因为 bash 和其他语言的不同点在于,bash 可以在脚本中直接运行命令,而且其中空格最重要的作用就是将参数列表中的参数区分开。

2.

if [ -n "$TOP" -a -f "$TOP/$TOPFILE" ] ; then
    。。。
else
    。。。
fi

shell语句的if then的格式

-n 检测字符串长度是否不为 0,不为 0 返回 true。44

-a 同and,也就是逻辑与

-f 该文件名是否存在且为文件

逻辑为:TOP变量有值且"$TOP/$TOPFILE"路径存在文件

3.

PWD= /bin/pwd

注意等号右边有空格,区别于PWD=/bin/pwd,意思是为执行/bin/pwd前先把PWD变量赋值为空字符串,这个“PWD变量赋值为空字符串”仅在执行/bin/pwd是有效的,执行结束PWD的值为赋值前的值

/bin/pwd执行了就会打印当前目录

4.

while [ \( ! \( -f $TOPFILE \) \) -a \( $PWD != "/" \) ]; do
                \cd ..
                T=`PWD= /bin/pwd -P`
            done

while do的格式

逻辑表达式中的“(”,“)”都带有转义,这个转义是必须加的

cd命令前的转义似乎不是必须的,去除也可以执行

/bin/pwd -P 多了-P的参数,-P表示实际物理路径而非软链接路径,在软连接地址测试下来/bin/pwd同样表示实际物理地址

`PWD= /bin/pwd -P` 反引号引用的直接执行,然后以打印值返回

逻辑为:当定位的路径不存在文件且不是根目录“/”时,进入父目录并将进入后的当前目录赋值给T变量

5.

local T=$(gettop)

envsetup.sh中其他函数调用gettop,经常有这种写法,这种写法会去执行gettop,然后以打印值作为返回,赋值给T

整体函数逻辑说明:

1.gettop获取Android项目的根目录,根据“build/make/core/envsetup.mk”这个路径去定位

备注:

只是用来记录自己的理解,其中一些措辞可能比较不专业。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值