Linux:导出环境变量命令export

相关阅读

Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm=1001.2014.3001.5482


Linux中的内建命令export命令用于创建一个环境变量,或将一个普通变量导出为环境变量,并且在这个过程中,可以给该环境变量赋值。

下面是该命令的语法。

用法:
export [-pfn] [name[=word]]
选项:
-p 指定该选项会打印出当前进程的所有环境变量(被导出的变量)及其值
-f 指定导出一个函数名
-n 取消一个环境变量(被导出的变量)或导出函数的导出属性

环境变量(被导出的变量)指的是一类特殊的变量,当一个进程开辟了其他进程后,它们会被子进程继承,系统默认的环境变量一般使用大写变量名,后面我们统称环境变量。例如$SHELL这个环境变量就存储了用户默认登录的Shell路径,可以使用echo命令查看一个环境变量的值。

[***@EDA ~]$ echo $SHELL
/bin/bash

使用export命令而不添加name参数会导致和使用-p选项一样的结果,即打印出当前进程的所有环境变量及其值。

[***@EDA ~]$ export
declare -x SHELL="/bin/bash"
declare -x WINDOWPATH="1"
declare -x KDEDIRS="/usr"
declare -x LANG="en_US.UTF-8"
declare -x PrimeTime_HOME="/opt/Synopsys/PrimeTime2018/pts/O-2018.06-SP1"
declare -x Synopsys_Dir="/opt/Synopsys"
*****

[***@EDA ~]$ export -p
declare -x SHELL="/bin/bash"
declare -x WINDOWPATH="1"
declare -x KDEDIRS="/usr"
declare -x LANG="en_US.UTF-8"
declare -x PrimeTime_HOME="/opt/Synopsys/PrimeTime2018/pts/O-2018.06-SP1"
declare -x Synopsys_Dir="/opt/Synopsys"
*****

一个进程中定义的普通的变量是无法被其子进程访问到的。

[***@EDA ~]$ aaa=1        #在当前进程创建一个变量
[***@EDA ~]$ bash         #在当前进程运行另一个bash子进程
[***@EDA ~]$ echo $aaa    #此时尝试访问$aaa失败
(nothing output)

一个进程中的环境变量可以被子进程继承。

[***@EDA ~]$ bbb=1       #在当前进程创建一个变量
[***@EDA ~]$ export bbb  #导出该变量(使其成为环境变量)
[***@EDA ~]$ bash        #在当前进程运行另一个bash子进程
[***@EDA ~]$ echo $bbb   #此时尝试访问$bbb成功
1

为什么我们不使用系统默认环境变量举例呢?这是因为即使我们改变了系统默认环境变量的值, 在新建bash子进程时,虽然其继承了父进程的环境变量,但其会自动读取配置文件初始化环境变量,从而覆盖之前改变的值。

[***@EDA ~]$ SHELL=1      #改变系统默认环境变量
[***@EDA ~]$ echo $SHELL  #在当前进程中,环境变量的值被改变
1
[***@EDA ~]$ export       #在当前进程中,环境变量的值被改变
*****
declare -x SHELL="1"
*****
[***@EDA ~]$ bash         #在当前进程运行另一个bash子进程
[***@EDA ~]$ echo $SHELL  #环境变量的值虽然被继承,但紧接着初始化了
/bin/bash

使用-n选项可以取消一个环境变量的导出属性,即将一个环境变量变成普通变量。

[***@EDA ~]$ ccc=1       #在当前进程创建一个变量
[***@EDA ~]$ export ccc  #导出该变量(使其成为环境变量)
[***@EDA ~]$ bash        #在当前进程运行另一个bash子进程
[***@EDA ~]$ echo $ccc   #此时尝试访问$ccc成功
1
[***@EDA ~]$ exit           #退出bash子进程
[***@EDA ~]$ export -n ccc  #取消变量导出(使其成为普通变量)
[***@EDA ~]$ echo $ccc      #当前进程仍可以访问
[***@EDA ~]$ bash           #在当前进程运行另一个bash子进程
[***@EDA ~]$ echo $ccc      #此时尝试访问$ccc失败
(nothing output)

使用-f选项可以导出一个函数,使该函数能在子进程中调用。

[***@EDA ~]$ my_function() {           #在当前进程创建一个函数
>     echo "This is my function."  
> }
[***@EDA ~]$ export -f my_function     #导出该函数
[***@EDA ~]$ bash
[***@EDA ~]$ my_function 
This is my function.

由于.bashrc配置文件的内容会在bash启动后被读取并执行,所以如果要添加一个默认的环境变量,需要在配置文件中使用export命令,如下图所示。

相关推荐
韩楚风3 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学3 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Ambition_LAO3 小时前
解决:进入 WSL(Windows Subsystem for Linux)以及将 PyCharm 2024 连接到 WSL
linux·pycharm
Pythonliu73 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我3 小时前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
追风赶月、3 小时前
【Linux】进程地址空间(初步了解)
linux
栎栎学编程3 小时前
Linux中环境变量
linux
我是哈哈hh4 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
郭二哈4 小时前
C++——模板进阶、继承
java·服务器·c++
挥剑决浮云 -4 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记