bash 变量作用域

在shell 编程中,对 bash 变量作用域的理解是非常重要的,特别是在某些函数会被多次调用的情况,如果在函数中定义的是全局变量,就会导致下一次调用的时候,出现错误的逻辑的时候不容易发现。

bash的变量分成三种:

  • 局部变量,使用local 声明。
  • 全局变量,在当前shell文件中可用, 没有声明local的变量就是全局变量, 默认是全局变量。
  • 环境变量。
bash 复制代码
function fun()
{
        # a global variable
        a=10
        # local variable
        local b=20
}

fun

# 能够访问全局变量,打印就是10
echo "${a}"

# 不能访问局部变量,这里打印就是一个空值
echo ${b}

编码建议: 在函数尽量使用局部变量进行操作。

一种特别的错误,for 循环中的全局变量:

bash 复制代码
function test()
{
        a="var run test"
        # 这里的v 是一个全局变量,如果后续有同名的调用,可能导致值被覆盖
        for v in $a; do
                echo $v
        done
}

test

# test
echo $v

其中一个比较好的解决办法是将v声明为局部变量。

相关推荐
峥嵘life3 小时前
Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结
android·开发语言·人工智能·php
mqiqe5 小时前
AgentScope Java Harness:4. 双层记忆系统 让 Agent 拥有真正的“长期大脑“
java·开发语言
gugucoding5 小时前
46. 【Java】JUC并发工具:让并发更简单
java·开发语言
Nebula_g6 小时前
JavaSE基础语法:面向对象高级(代码中的成分)
java·开发语言·编程·javase·技术栈·高级语法
for_ever_love__6 小时前
python基础语法学习: 异常的传递性
开发语言·python·学习
依然鸣7 小时前
PTA团体程序设计天梯赛L1真题讲解L1-077-080
开发语言·c++·算法·深度优先·pat考试·图论
byxdaz7 小时前
QT中服务使用
开发语言·qt
库玛西9 小时前
现代 C++ 智能指针全景指南:从 RAII 思想到工业级实践
c语言·开发语言·c++·笔记·面试
caimouse9 小时前
ReactOS 图形系统分析(19):颜色转换对象 — XLATEOBJ(xlateobj.c/h)
c语言·开发语言
liulilittle9 小时前
无锁并发容器的设计与实现原理
开发语言·c++·set·map·并发·无锁·lock-free