当前位置: 首页 > news >正文

[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)

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

特点

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

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

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

神秘泣男子

相关文章:

  • vscode软件上安装 Fitten Code插件及使用
  • 用Python处理Excel的资源
  • 4、视觉里程计:特征点法、直接法和半直接法
  • C++日期类的实现
  • 记一次 .NET某工控视觉自动化系统 卡死分析
  • 简单聊一下Oracle,MySQL,postgresql三种锁表的机制,行锁和表锁
  • python爬虫:实现动态网页的爬取,以爬取视频为例
  • 【C++进阶学习】第一弹——继承(上)——探索代码复用的乐趣
  • 6.14作业
  • 【Ardiuno】实验ESP32单片机自动配置Wifi功能(图文)
  • Solr7.4.0报错org.apache.solr.common.SolrException
  • 3、matlab单目相机标定原理、流程及实验
  • Linux2(文件类型分类 基本命令2 重定向)
  • 英伟达算法岗面试,问的贼专业。。。
  • 干货!电脑如何录屏?6款win10录屏大师软件深度测评
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 阿里研究院入选中国企业智库系统影响力榜
  • 汉诺塔算法
  • 设计模式(12)迭代器模式(讲解+应用)
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 数组的操作
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (21)起落架/可伸缩相机支架
  • (C++20) consteval立即函数
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .Net core 6.0 升8.0
  • .Net IOC框架入门之一 Unity
  • .NET Micro Framework初体验(二)
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .Net多线程Threading相关详解
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • .sys文件乱码_python vscode输出乱码
  • /run/containerd/containerd.sock connect: connection refused
  • @html.ActionLink的几种参数格式
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解