学习linux commands:export

本文介绍了bash shell内置命令export的使用方法,包括如何导出环境变量、列出已导出变量及删除导出变量等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

export命令是bash这个shell里的内置命令之一,这意味着它是你的shell的一部分,export命令相当简单,因为它有着简单直接的语法和仅仅三个参数。 大致上,export命令标志着在一个新的forked子进程导出一个环境变量,并且因此允许一个子进程继承所有标记的变量。如果你不明白这是什么意思,这个文章会更详细地解释这个过程。

常用参数

  • -p
    列出所有当前shell里export出的变量的名称

  • -n
    从export列表中移除某个变量

  • -f
    这些变量(names)将是作为函数被export(导出)

基本的export

考虑一下这个例子:

$ a=linuxcareer.com

$ echo $a

linuxcareer.com //这是有输出哦

$ bash

$ echo $a

     //实际上没有输出哦
$

讲解:

  • 第一行:一个叫做“a”的变量,含有字符:linuxcareer.com被创建出来

  • 第二行:使用echo命令打印变量a的内容

  • 第三行: 创建新的子bash shell

  • 第四行: 变量a没有任何的值定义

从上面这个例子里我们可以看到,任何从父进程里fork的子进程默认并没有继承父进程的变量们。这就是为何我们需要export命令。看一下下面这个针对上面例子的改进版本吧:

$ a=linuxcareer.com
$ echo $a
linuxcareer.com
$ export a
$ bash
$ echo $a
linuxcareer.com
$

在第三行我们使用了export命令来让a这个变量在新的子进程被创建时被导出。结果就是,a变量是一个仍然保持“linuxcareer.com”字符串的变量。
值得注意的是:为了在新的进程中(bash)仍然保留a这个变量,这个进程(bash)一定是fork的是a被创建的进程。
关于父子进程的关系在下面有解释:

子进程vs父进程

在这个部分我们简单地介绍父子进程之间的关系。任何一个进程都可以同时作为父进程和子进程。 唯一的一个例外就是init这个进程,这个进程一直会有一个1的PID(progress ID)。因此,init进程是所有运行在当前你的linux系统上的进程的老爹。

$ps -p 1
 PID TTY      TIME   CMD
 1   ?      00:00:02  init

所有进程正常情况下都有一个父进程,在它被创建的地方,它因此会被当作一个父进程的孩子。例如:

$ echo $$
27861
$ bash
$ echo $$
28034
$ ps --ppid 27861
  PID TTY          TIME CMD
28034 pts/3    00:00:00 bash

第一行: 打印当前shell的pid 即 27861

第二行: 创建一个子进程,是从pid为27861这个进程创建

第三行: 打印当前shell 的pid 即 28034

第四行:使用ps命令打印pid是27861的子进程的pid (所以有28034在最后一行看到)

当创建一个新的子进程,export命令是用来保证所有父进程里的变量都能在子进程里可用。

使用export命令

我们已经学习了一些export的基本命令,现在探索一些细节把。当你不带任何参数来使用export命令时,它只会简单地输出所有暴露给子进程的变量。这和你使用-p参数是一样的:

$ export
declare -x COLORFGBG="15;0"
declare -x DEFAULTS_PATH="/usr/share/gconf/cinnamon.default.path"
declare -x DESKTOP_SESSION="cinnamon"
declare -x DISPLAY=":0".....

正如之前所展示的,要export一个变量我们只需使用那个变量名作为参数,作为export命令的参数。

$ MYVAR=10
$ export | grep MYVAR
$ export MYVAR
$ export | grep MYVAR
declare -x MYVAR="10"

如你所见,一旦MYVAR这个变量被export出去,它就会在被export过的变量列表中出现,另外,上面这个例子也能直接使用export命令来变得短一些。

$export MYVAR=10
$export | grep MYVAR
declare -x MYVAR="10"

最常用的export的可能就是用来定义PATH,这是一个shell变量

$export PATH=$PATH:/usr/local/bin

在上面这个例子中,我们把/usr/local/bin包括到了当前的PATH定义中。

从export列表中移除变量(names)

接下来这个例子,我们有MYVAR定义在export列表

$export |grep MYVAR
declare -x MYVAR="10"

移除变量,从export 列表的话,我们应该使用 -n参数。

$ export | grep MYVAR
declare -x MYVAR="10"
$ export -n MYVAR
$ export | grep MYVAR
$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值