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声明为局部变量。

相关推荐
lightqjx2 分钟前
【C++】unordered系列的封装
开发语言·c++·stl·unordered系列
zh_xuan17 分钟前
kotlin lazy委托异常时执行流程
开发语言·kotlin
阿猿收手吧!34 分钟前
【C++】string_view:高效字符串处理指南
开发语言·c++
玄同7651 小时前
我的 Trae Skill 实践|使用 UV 工具一键搭建 Python 项目开发环境
开发语言·人工智能·python·langchain·uv·trae·vibe coding
Yorlen_Zhang1 小时前
Python Tkinter Text 控件完全指南:从基础编辑器到富文本应用
开发语言·python·c#
lxl13071 小时前
C++算法(1)双指针
开发语言·c++
不绝1911 小时前
C#进阶:预处理指令/反射,Gettype,Typeof/关键类
开发语言·c#
无小道2 小时前
Qt-qrc机制简单介绍
开发语言·qt
zhooyu2 小时前
C++和OpenGL手搓3D游戏编程(20160207进展和效果)
开发语言·c++·游戏·3d·opengl
HAPPY酷2 小时前
C++ 和 Python 的“容器”对决:从万金油到核武器
开发语言·c++·python