linux中export的作用

摘要:
因为实验2中的export2.sh添加了export,所以var变成了一个环境变量,所以子shell可以看到var。在实验1中,由于没有exportvar,var是一个局部变量,子shell无法看到。在Linux中,在profile、bashrc或其他类似文件中设置环境变量时,如果没有导出,它只能在直接启动的shell中工作。如果在当前shell下运行脚本或直接启动子shell,它实际上是一个本地变量。

 https://blog.csdn.net/damontive/article/details/50352722

参考:http://www.cnblogs.com/zhangze/articles/1832542.html
以前一直觉得export可有可无,虽然知道export是干嘛的,不就是把本地变量变成全局变量么(实际中叫环境变量),但是感觉好像没有这货也没影响,今天看了这篇博文,终于恍然大悟。用自己的语言,思维方式重新整理一遍

首先说明两个概念:
父shell与子shell,从shellA中启动一个shell,称之为shellB。 shellA为父shell,shellB为子shell。
最容易理解的情况就是在一个shell中执行一个gnome-terminal命令(不同桌面环境命令不一样),弹出一个新的shell
最常见的情况是在当前shell下执行脚本,这个脚本实际上是在子shell中执行的

概念说完了,感觉啰嗦了, 说实验

这里用最常见的情况举例:在当前shell下执行脚本

现在有三个脚本
exp1.sh

var="hello,world"
 
exp2.sh

var="hello,world"
export var
 
test.sh

echo $var

实验1:

source exp1.sh
echo $var
bash test.sh
 
结果:


实验2:

source exp2.sh
echo $var
bash test.sh
 
结果:

可以看到在当前shell下执行echo $var是没有任何问题的,但是执行bash test.sh时,实验1是没有任何输出(找不到var这个变量)实验2 echo出了var的值。因为实验2中exp2.sh加入了export,所以var变成了环境变量,所以var对子shell是可见的,而实验1中由于没有export var,所以var是个局部变量,并不能被子shell看到

再啰嗦几句, linux中在 profile 或者 bashrc 或者其他类似的文件中设置环境变量时(比如PATH),如果没有export,那么只能在直接启动的shell中起作用,如果在当前shell下运行脚本或者直接启动一个子shell,因为实际上是局部变量。子shell看不见的,所以就gg了
————————————————
版权声明:本文为CSDN博主「胡LiuJia」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/damontive/article/details/50352722

免责声明:文章转载自《linux中export的作用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇WSL2+PhpStorm+xdebug环境下端口连接不通SpringAOP获取请求信息下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux进程调度与源码分析(三)——do_fork()的实现原理

        用户层的fork(),vfork(),clone()API函数在执行时,会触发系统调用完成从用户态陷入到内核态的过程,而上述函数的系统调用,最终实现都是通过内核函数do_fork()完成,本篇着重分析do_forkI()函数的实现过程。         Linux操作系统中,产生一个新的进程和产生一个新的线程对于内核来说,最为本质的区别在于...

linux定时任务执行没结果,手动执行有结果问题总结

今天写了个脚本手动执行有结果,但是放到系统定时任务跑却没结果,之前也遇到这种问题解决了没记录后面又懵逼了一次~~~ 如下图: 手动执行有结果 放到定时任务中每五分钟执行一次 解决方法: 脚本中加载系统环境变量 source /etc/profile 如果不加入脚本定时任务可以这样写效果一样 */5 * * * * ./etc/profile;sh /f...

linux系统python3安装pip

环境ubutun14,python版本是python3.6. 今天在安装Pip 时出现ModuleNotFoundError: No module named 'distutils.util'。操作步骤如下: 我们可以通过以下命令来判断是否已安装: pip --version 如果还未安装,则可以使用以下方法来安装: $ curl https://b...

Linux操作系统文档

一 Linux操作系统概述 l为什么要学习Linux操作系统:  1、  大部分服务端都是使用Linux操作系统(Django,爬虫,科学运算等项目是部署到服务器中的) 2、  一些企业和学校(国外学校)采用Linux进行研发和教学 3、  很多嵌入式开发使用Linux系统 4、  大数据、云计算,采用Linux操作系统(CentOS)  Linux系统的...

QT在linux下获取网络类型

开发中遇到这样一个需求,需要判断当前网络的类型(wifi或者4G或者网线),在这里给大家一块分享下: 1、这里有一个linux指令:nmcli(大家自行百度即可) 2、nmcli device status 这个指令就会打印出你想要的东西 3、如何用QT去调取这个指令获取结果来进行上报呢?来一段代码吧 //执行linux指令获取返回结果 QString...

Snort-IPS-入侵防御系统安装及部署小记

安装环境为Ubuntu,使用源码编译方式安装并导入社区Snort规则;通过Splunk做GUI展示,联合防火墙做防御,依据Snort官网文档操作。 Ubuntu 18和20上的Snort 3.0.1用Splunk当SIEM 诺亚·迪特里希 内容介绍 安装Snort 配置网卡 安装OpenApplD 安装Snort规则集 启用内置规则 将PCAP文件传...