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

相关推荐
喵了meme10 小时前
C语言实战4
c语言·开发语言
码界奇点10 小时前
Python从0到100一站式学习路线图与实战指南
开发语言·python·学习·青少年编程·贴图
9ilk10 小时前
【C++】--- 特殊类设计
开发语言·c++·后端
sali-tec11 小时前
C# 基于halcon的视觉工作流-章68 深度学习-对象检测
开发语言·算法·计算机视觉·重构·c#
生骨大头菜12 小时前
使用python实现相似图片搜索功能,并接入springcloud
开发语言·python·spring cloud·微服务
绝不收费—免费看不了了联系我12 小时前
Fastapi的单进程响应问题 和 解决方法
开发语言·后端·python·fastapi
消失的旧时光-194313 小时前
深入理解 Java 线程池(二):ThreadPoolExecutor 执行流程 + 运行状态 + ctl 原理全解析
java·开发语言
咖啡续命又一天13 小时前
Trae CN IDE 中 Python 开发的具体流程和配置总结
开发语言·ide·python·ai编程
4311媒体网13 小时前
帝国cms调用文章内容 二开基本操作
java·开发语言·php
GSDjisidi13 小时前
东京IT软件会社-(株)GSD|多种技术栈募集,高度人才+20分
开发语言·面试·职场和发展