Linux export命令

export命令 是Linux/Unix系统中用于设置环境变量的shell内建命令。它可以将变量导出到子进程的环境中,使得子进程可以访问这些变量。

命令简介

export命令是Bash shell的内置命令,用于设置环境变量。环境变量是全局变量,可以被当前shell及其所有子进程访问。使用export设置的变量会在整个会话期间保持有效,直到shell会话结束或变量被取消设置。

命令语法

export [-fn] [name[=value] ...]
export -p

参数说明

参数 说明
-f 将name作为函数名导出
-n 从导出的变量中删除指定的变量名
-p 列出所有导出的变量
name[=value] 要导出的变量名和值

基本用法示例

1. 设置并导出环境变量

设置一个名为MY_VAR的环境变量,并使其对子进程可用:

# 设置并导出环境变量
export MY_VAR="Hello World"

# 验证变量已设置
echo $MY_VAR

# 在子进程(如新终端)中也可访问
bash -c 'echo $MY_VAR'

2. 查看所有导出的环境变量

使用-p选项列出当前shell中所有已导出的变量:

# 查看所有导出的环境变量
export -p

# 或者使用简写
export

3. 设置PATH环境变量

export常用于添加新的路径到PATH环境变量:

# 将自定义路径添加到PATH
export PATH="$PATH:/usr/local/myapp/bin"

# 验证PATH已更新
echo $PATH

# 现在可以直接运行该路径下的程序
myapp

高级用法

1. 导出函数

使用-f选项可以导出函数,使其在子shell中可用:

# 定义一个函数
myfunc() {
    echo "This is a function"
}

# 导出函数
export -f myfunc

# 在子shell中调用函数
bash -c 'myfunc'

2. 取消导出的变量

使用-n选项可以从导出列表中移除变量:

# 导出变量
export MY_VAR="test"

# 取消导出(变量仍然存在,但不会传递给子进程)
export -n MY_VAR

# 验证变量不再传递给子进程
bash -c 'echo $MY_VAR'  # 输出为空

3. 设置多个变量

可以一次设置和导出多个环境变量:

# 同时设置多个环境变量
export VAR1="value1" VAR2="value2" VAR3="value3"

# 验证所有变量
echo $VAR1 $VAR2 $VAR3

实际应用场景

场景1:设置Java开发环境
# 设置JAVA_HOME环境变量
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"

# 更新PATH以包含Java二进制文件
export PATH="$JAVA_HOME/bin:$PATH"

# 验证Java版本
java -version
场景2:配置数据库连接信息
# 设置数据库连接环境变量
export DB_HOST="localhost"
export DB_PORT="5432"
export DB_NAME="mydatabase"
export DB_USER="myuser"
export DB_PASSWORD="mypassword"

# 在脚本中使用这些变量
echo "Connecting to $DB_HOST:$DB_PORT/$DB_NAME as $DB_USER"
场景3:设置shell提示符
# 自定义PS1(提示符)
export PS1='\[\e[1;32m\]\u@\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\$ '

# 或者设置更详细的提示符
export PS1='[\u@\h \W]$(__git_ps1 " (%s)") \$ '

永久环境变量设置

export命令设置的变量仅在当前shell会话中有效。要永久设置环境变量,需要将其添加到配置文件中:

1. 针对当前用户(永久生效)

# 编辑用户配置文件(bash)
echo 'export MY_VAR="myvalue"' >> ~/.bashrc

# 或者编辑~/.bash_profile(某些系统)
echo 'export MY_VAR="myvalue"' >> ~/.bash_profile

# 使更改立即生效
source ~/.bashrc

2. 针对所有用户(系统级)

# 编辑全局配置文件(需要root权限)
sudo echo 'export MY_VAR="myvalue"' >> /etc/profile

# 或者创建自定义配置文件
sudo echo 'export MY_VAR="myvalue"' >> /etc/profile.d/myenv.sh

常见问题

A: 直接赋值(如VAR="value")创建的变量只在当前shell中可用,不会传递给子进程。而使用export命令(如export VAR="value")设置的变量会传递给所有子进程。

# 直接赋值,不传递给子进程
VAR1="local"
bash -c 'echo $VAR1'  # 输出为空

# 使用export,传递给子进程
export VAR2="global"
bash -c 'echo $VAR2'  # 输出: global

A: 可以使用echo命令查看环境变量的值:

# 查看PATH环境变量
echo $PATH

# 查看HOME环境变量
echo $HOME

# 查看所有以JAVA开头的环境变量
env | grep ^JAVA

A: 使用unset命令可以删除环境变量:

# 设置环境变量
export MY_VAR="test"

# 取消设置
unset MY_VAR

# 验证变量已删除
echo $MY_VAR  # 输出为空
命令总结
  • export 用于设置和导出环境变量到子进程
  • 使用 export -p 查看所有已导出的变量
  • 使用 export -n 从导出列表中移除变量
  • 要使环境变量永久生效,需要将其添加到 ~/.bashrc~/.bash_profile 配置文件中
  • 环境变量对于配置应用程序、设置路径和管理系统设置非常有用