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

相关推荐
爱装代码的小瓶子2 小时前
数据结构之队列(C语言)
c语言·开发语言·数据结构
Maybe_ch3 小时前
.NET-键控服务依赖注入
开发语言·c#·.net
超浪的晨3 小时前
Java UDP 通信详解:从基础到实战,彻底掌握无连接网络编程
java·开发语言·后端·学习·个人开发
终焉暴龙王3 小时前
CTFHub web进阶 php Bypass disable_function通关攻略
开发语言·安全·web安全·php
Edingbrugh.南空4 小时前
Aerospike与Redis深度对比:从架构到性能的全方位解析
java·开发语言·spring
CodeCraft Studio5 小时前
借助Aspose.HTML控件,在 Python 中将 HTML 转换为 Markdown
开发语言·python·html·markdown·aspose·html转markdown·asposel.html
QQ_4376643145 小时前
C++11 右值引用 Lambda 表达式
java·开发语言·c++
aramae5 小时前
大话数据结构之<队列>
c语言·开发语言·数据结构·算法
封奚泽优5 小时前
使用Python实现单词记忆软件
开发语言·python·random·qpushbutton·qtwidgets·qtcore·qtgui
liulilittle6 小时前
C++/CLI与标准C++的语法差异(一)
开发语言·c++·.net·cli·clr·托管·原生