export命令是Bash shell的内置命令,用于设置环境变量。环境变量是全局变量,可以被当前shell及其所有子进程访问。使用export设置的变量会在整个会话期间保持有效,直到shell会话结束或变量被取消设置。
export [-fn] [name[=value] ...]
export -p
| 参数 | 说明 |
|---|---|
-f |
将name作为函数名导出 |
-n |
从导出的变量中删除指定的变量名 |
-p |
列出所有导出的变量 |
name[=value] |
要导出的变量名和值 |
设置一个名为MY_VAR的环境变量,并使其对子进程可用:
# 设置并导出环境变量
export MY_VAR="Hello World"
# 验证变量已设置
echo $MY_VAR
# 在子进程(如新终端)中也可访问
bash -c 'echo $MY_VAR'
使用-p选项列出当前shell中所有已导出的变量:
# 查看所有导出的环境变量
export -p
# 或者使用简写
export
export常用于添加新的路径到PATH环境变量:
# 将自定义路径添加到PATH
export PATH="$PATH:/usr/local/myapp/bin"
# 验证PATH已更新
echo $PATH
# 现在可以直接运行该路径下的程序
myapp
使用-f选项可以导出函数,使其在子shell中可用:
# 定义一个函数
myfunc() {
echo "This is a function"
}
# 导出函数
export -f myfunc
# 在子shell中调用函数
bash -c 'myfunc'
使用-n选项可以从导出列表中移除变量:
# 导出变量
export MY_VAR="test"
# 取消导出(变量仍然存在,但不会传递给子进程)
export -n MY_VAR
# 验证变量不再传递给子进程
bash -c 'echo $MY_VAR' # 输出为空
可以一次设置和导出多个环境变量:
# 同时设置多个环境变量
export VAR1="value1" VAR2="value2" VAR3="value3"
# 验证所有变量
echo $VAR1 $VAR2 $VAR3
# 设置JAVA_HOME环境变量
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
# 更新PATH以包含Java二进制文件
export PATH="$JAVA_HOME/bin:$PATH"
# 验证Java版本
java -version
# 设置数据库连接环境变量
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"
# 自定义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会话中有效。要永久设置环境变量,需要将其添加到配置文件中:
# 编辑用户配置文件(bash)
echo 'export MY_VAR="myvalue"' >> ~/.bashrc
# 或者编辑~/.bash_profile(某些系统)
echo 'export MY_VAR="myvalue"' >> ~/.bash_profile
# 使更改立即生效
source ~/.bashrc
# 编辑全局配置文件(需要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 -p 查看所有已导出的变量export -n 从导出列表中移除变量~/.bashrc 或 ~/.bash_profile 配置文件中