[Shell编程学习路线]——探讨Shell中变量的作用范围(export)

🏡作者主页:点击! 

🛠️Shell编程专栏:点击!

⏰️创作时间:2024年6月14日10点14分

🀄️文章质量:95分


文章目录

————前言————

定义变量:

输出变量:

切换到新的Shell环境:

在新Shell中尝试输出变量:

退出新Shell,返回原来的Shell环境:

再次输出变量,验证变量仍然存在:

解释

export

应用案例

总结

1. 局部变量(Local Variables)

2. 全局变量(Global Variables)


————前言————

在Shell编程中,理解变量的作用范围是编写高效脚本的关键一步。变量的作用范围决定了它们在脚本中的可访问性和生命周期,正确地管理变量作用范围能有效避免命名冲突和意外修改。在本篇指南中,我们将深入探讨Shell变量的本地和全局作用范围,解释如何在函数和脚本之间传递变量,并提供最佳实践以确保脚本的健壮性和可维护性。让我们一起揭开Shell变量作用范围的奥秘,提升你的脚本编写技能吧!

默认情况下,新定义的变量只在当前的 Shel 环境中有效,因此称为局部变量。当进入子程序或新的子 Shell 环境时,局部变量将无法再使用。

💯趣站💯

前些天发现了一个巨牛的🤖人工智能学习网站,通俗易懂,风趣幽默,忍不住粉香一下给大家,人工智能, 机器算法等......  

点击跳转!icon-default.png?t=N7T8https://www.captainbed.cn/sis/

在不同Shell环境中变量的作用范围

在Linux中,变量的作用范围(Scope)和生命周期取决于它们的定义方式和Shell环境。以下是一个简单的示例,通过切换Shell环境来演示变量在不同Shell环境中的可见性:

定义变量

[root@localhost ~]# version=2    // 定义变量
[root@localhost ~]# name=java    // 定义变量

输出变量

[root@localhost ~]# echo "$version $name"    // 输出变量
2 java

切换到新的Shell环境

[root@localhost ~]# bash    // 切换Shell环境

在新Shell中尝试输出变量

[root@localhost ~]# echo $name    // 再次输出变量,发现是空白 

退出新Shell,返回原来的Shell环境

[root@localhost ~]# exit    // 返回刚刚的shell环境

再次输出变量,验证变量仍然存在

[root@localhost ~]# echo "$version $name"    // 输出变量发现存在!
2 java

解释

在这个示例中,我们在原始的Shell环境中定义了两个变量versionname,并成功输出了它们的值。然而,当我们切换到一个新的Shell环境时,发现这些变量不再存在。这是因为在默认情况下,Shell变量是局部的(local),即它们只在定义它们的那个Shell环境中可见。

当我们退出新的Shell环境,回到原来的Shell时,这些变量依然存在,并且可以正常访问和输出它们的值。这说明原来的Shell环境和新的Shell环境是独立的,变量在各自的环境中作用范围不交叉。

如果希望在新的Shell环境中也能访问这些变量,可以使用export命令将变量声明为环境变量(environment variables):

[root@localhost ~]# export version=2
[root@localhost ~]# export name=java
[root@localhost ~]# bash
[root@localhost ~]# echo "$version $name"    // 变量在新的Shell环境中也能访问
2 java
[root@localhost ~]# exit

export

export命令用于将Shell变量设置为环境变量,使其在当前Shell会话中以及所有子Shell中都可见。换句话说,export命令将局部变量提升为全局环境变量,从而扩大它们的作用范围。

基本语法

export 变量=值

或者将已有的变量导出为环境变量:

export 变量名

应用案例

导出变量以便在子Shell中使用

# 定义一个局部变量
VAR="Hello World"
# 导出为环境变量
export VAR
# 启动一个子Shell
bash
# 在子Shell中访问变量
echo $VAR   # 输出: Hello World
# 退出子Shell
exit

总结

在编程和脚本编写中,变量的作用范围(Scope)决定了变量在代码中的可见性和生命周期。理解变量的作用范围有助于编写更高效和错误更少的代码。以下是对变量作用范围的总结和我的看法:

1. 局部变量(Local Variables)

定义: 局部变量是在函数、方法或块内定义的变量。它们只在定义它们的范围内可见和有效。

特点

  • 只在当前块或函数内有效。
  • 一旦退出该块或函数,变量就会被销毁。
  • 防止变量名冲突,因为同名变量可以在不同的块中存在而互不影响
2. 全局变量(Global Variables)

定义: 全局变量是在脚本或程序的顶层定义的变量,它们在整个脚本或程序中都可见和有效。

特点

  • 在脚本或程序的任何地方都可以访问和修改。
  • 如果不加以管理,可能会导致变量名冲突和难以追踪的错误。

"成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"

"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"

神秘泣男子

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/349623.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】一篇文章带你深度理解函数

目录 1. 函数的概念 2. 库函数 2.1 标准库和头文件 2.2 库函数的使用方法 2.2.1 举例 sqrt 2.2.2 库函数文档的一般格式 3. 自定义函数 3.1 函数的语法形式 3.2 函数的举例 4. 形参和实参 4.1 实参 4.2 形参 4.3 实参和形参的关系 5. …

“三夏”农忙:EasyCVR/EasyDSS无人机技术助推现代农业走向智能化

随着科技的飞速发展,无人机技术已经逐渐渗透到我们生活的方方面面。其中,无人机在农业领域的应用尤为引人注目。它们不仅提高了农业生产的效率,还为农民带来了更便捷、更智能的种植方式。 无人机在农业应用场景中,通过搭载各种设备…

生命在于学习——Python人工智能原理(3.3)

三、深度学习 4、激活函数 激活函数的主要作用是对神经元获得的输入进行非线性变换,以此反映神经元的非线性特性。常见的激活函数有线性激活函数、符号激活函数、Sigmod激活函数、双曲正切激活函数、高斯激活函数、ReLU激活函数。 (1)线性…

Go Module详解

文章目录 基本介绍相关环境变量Go Module的使用初始化项目(go mod init)管理依赖项(go mod edit)获取依赖项(go mod download)整理依赖项(go mod tidy)导入vendor目录(go…

Zynq学习笔记--AXI4-Stream到视频输出IP是如何工作的?

目录 1. 简介 2. 原理详解 2.1 示例工程 2.2 AXI4-Stream to Video Out 3. Master/Slave Timing Mode 3.1 Slave Timing Mode 3.2 Master Timing Mode 4. 总结 1. 简介 本文主要介绍了 AXI4-Stream 到视频输出 的内容。其中,示例工程展示了一个具体的设计&…

后端项目实战--瑞吉外卖项目软件说明书

瑞吉外卖项目软件说明书 一、项目概述 瑞吉外卖项目是一个外卖服务平台,用户可以通过该平台浏览餐厅菜单、下单、支付以及追踪订单状态。产品原型就是一款产品成型之前的一个简单的框架,就是将页面的排版布局展现出来,使产品得初步构思有一…

【 EI会议 | 西南大学主办 | 往届均已实现检索】第三届神经形态计算国际会议(ICNC 2024)

第三届神经形态计算国际会议(ICNC 2024) 2024 3rd International Conference on Neuromorphic Computing (ICNC 2024) 一、重要信息 大会官网:www.ic-nc.org(点击投稿/参会/了解会议详情) 会议时间:2024年12月13-15…

OpenAI函数调用:使用Assistants API函数工具的一个示例

Are you looking to expand GPTs capabilities? Check out this tutorial for a complete example of an AI Assistant that can send emails whenever we ask it to. 您是否希望扩展GPT的功能?查看这个教程,它提供了一个完整的示例,展示了…

探索智慧农业系统架构的设计与应用

随着科技的不断进步和农业现代化的推进,智慧农业正逐渐成为农业发展的重要趋势。智慧农业系统架构的设计与应用,将农业生产与信息技术相结合,为农业生产提供了新的思路和解决方案。本文将深入探讨智慧农业系统架构的设计与应用,从…

遥控玩具车电机驱动应用中的双H桥驱动芯片

遥控玩具车的基本工作原理是通过无线电遥控器发送信号,这些信号被玩具车内的接收器接收并解码,从而控制玩具车的运行。根据车身外型的不同,可以分为:普通的私家房车、越野车、货柜车、翻斗车等等。遥控器的操作,如前进…

NG32031单片机串口初始化

目录 1. 串口基础 2. 串口配置步骤 3. N32G031串口初始化示例 3.1开启时钟 3.2 配置GPIO 3.3 配置USART 3.4 使能中断(如果需要) 3.5. 示例代码 4. 调试和验证 5. 注意事项 6. 额外功能 NG32G031单片机的串口(UART)通常…

鸿蒙轻内核M核源码分析系列二十 Newlib C

LiteOS-M内核LibC实现有2种,可以根据需求进行二选一,分别是musl libC和newlibc。本文先学习下Newlib C的实现代码。文中所涉及的源码,均可以在开源站点https://gitee.com/openharmony/kernel_liteos_m 获取。 使用Musl C库的时候&#xff0c…

c++实战知识点

c实战知识点 一、概述1.数据2.C11的原始字面量3.数据类型的别名4.const修饰指针5.void关键字6.内存模型7.二级指针8.函数指针和回调函数9.数组10.C风格字符串11.二维数组用于函数的参数行指针(数组指针) 12.引用引用与const 13.各种形参的使用场景14.重载…

MySQL中的正排/倒排索引和DoubleWriteBuffer

正排/倒排索引 正排索引 文档1:词条A,词条B,词条C 文档2:词条A,词条D 文档3:词条B,词条C,词条E正排表是以文档的ID为关键字,表中记录文档中的每个字的位置信息&#xff…

python中的turtle

turtle个别指令 初始箭头默认指向为东(右) 往前(右)三个格:turtle.forward(3) 往后(左)三个格:turtle.backward(3) 往左转90度:turtle.left(90) 往右转90度&#xf…

现代X86汇编-C和ASM混合编程举例

端午假期安装好了vs c2022,并写了个简单的汇编代码,证明MASM真的可以运行。今天需要搞一个实实在在的C和ASM混合编程的例子,因为用纯汇编的求伯君写WPS的时代一去不复返了。个别关键函数用汇编,充分发挥CPU的特色功能,偶尔还是需要…

关于RDMA传输的基本流量控制

Basic flow control for RDMA transfers | The Geek in the Corner (wordpress.com) 名词解释 IB : InfiniBand的缩写,指的就是InfiniBand技术。 MAD : Management Datagram的缩写。MAD是InfiniBand架构中用于设备管理和配置的一种特殊消息…

用数据说话,效果好上一万倍,不是空口说白话的“好很多”

作为一名大数据开发者,我深知数据的有很大的魔力(我这句话就没用数据,听上去很无力)。数据不仅仅是数字和图表,它还能赋予我们强大的说服力和权威感。让我给你详细讲讲数据如何让理论插上翅膀。 目录 数据的“靠谱”…

关于dwarf 中 DW_AT_data_member_location 的理解

1、用python elftool解析结构体的时候,成员偏移量存在DW_AT_data_member_location字段解析;此字段是可变长的(uleb128编码); 第一个字节是操作码 后续是偏移量 uleb128编码,正如其名,是小端结尾…

【权威出版/投稿优惠】2024年智慧城市与信息化教育国际会议(SCIE 2024)

2024 International Conference on Smart Cities and Information Education 2024年智慧城市与信息化教育国际会议 【会议信息】 会议简称:SCIE 2024 大会时间:点击查看 大会地点:中国北京 会议官网:www.iacscie.com 会议邮箱&am…