Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
在 linux shell 脚本中,函数内直接赋值即可修改全局变量;若误用 local 会创建同名局部变量而屏蔽全局变量;仅当需在已声明 local 同名变量后强制修改全局时,才用 declare -g。

在 Linux Shell 脚本中,函数内修改全局变量数值不需要特殊关键字(如 Python 的 global),默认就是操作全局作用域的变量。但要注意局部变量会屏蔽同名全局变量,所以关键在于“不意外创建局部变量”。
直接赋值就能修改全局变量
Shell 中定义在函数外部的变量,默认是全局可读可写的。只要函数内没有用 local 声明同名变量,任何直接赋值都会作用于全局变量:
- ✅ 正确示例:
x=100<br>myfunc() {<br> x=200 # 直接改全局 x<br> echo "函数内: $x"<br>}<br>myfunc<br>echo "全局值: $x" # 输出 200
避免被 local 变量干扰
如果误加 local,就会创建仅在函数内有效的局部变量,全局变量不受影响:
- ❌ 错误写法(改不了全局):
y=50<br>badfunc() {<br> local y=60 # 这只是局部 y<br> echo "函数内 y: $y"<br>}<br>badfunc<br>echo "全局 y: $y" # 仍是 50
所以,想改全局变量,就别对它用 local;若需局部副本,应换名(如 local y_local=$y)。
需要显式声明“全局”的特殊情况
只有在函数内先用 local 声明了同名变量后,又想回头操作全局变量时,才需用 declare -g(bash 4.2+):
- ✅ 仅当必须混用 local 和全局同名变量时才用:
z=10<br>mixed() {<br> local z=20 # 局部 z<br> echo "局部 z: $z"<br> declare -g z=30 # 强制改全局 z<br>}<br>mixed<br>echo "全局 z: $z" # 输出 30
推荐做法:明确意图,减少歧义
为提升可读性和可维护性,建议:
- 全局变量用全大写命名(如
COUNT、CONFIG_PATH),和局部变量自然区分开 - 优先通过函数返回值或参数传递数据,而非依赖全局变量修改
- 若确实要修改全局状态,确保该变量名有业务含义,且不在函数内重复声明










