环境变量简介
环境变量是操作系统中用于描述系统运行环境的一系列变量。常见的环境变量包括:
- PATH:指定命令的搜索路径。
- SHELL:指定默认的Shell。
- HOME:指定用户的主目录。
加载环境变量
当一个Shell启动时,会从特定的配置文件中读取并加载环境变量。例如,Bash Shell 会从~/.bashrc 文件中读取环境变量。
普通变量与环境变量
在Shell中,变量可以分为普通变量和环境变量。普通变量仅在当前Shell进程中有效,而环境变量不仅在当前Shell进程中有效,还会传递给其子进程。
定义普通变量
在Bash中定义一个普通变量:
$ newvar=8
$ echo $newvar
8
使用env命令查看环境变量,发现自定义的变量并不在其中,说明普通变量和环境变量是不同的。
环境变量的特性
环境变量可以通过set和unset命令进行创建和删除。例如,尝试删除HOME环境变量:
$ echo $HOME
/home/user
$ unset HOME
$ echo $HOME
虽然在当前Shell中删除了HOME,但新开一个Shell时,HOME又会恢复,因为环境变量是在Shell启动时从配置文件中加载的。
环境变量的传递
环境变量属于当前Shell及其子进程。例如,在~/.bashrc文件中添加一个变量myvar=9,Bash启动时myvar会被加载为环境变量,并在子Shell中可见。
普通变量的局限性
普通变量仅在当前Shell进程中有效,不会传递给子Shell。如果希望普通变量在子Shell中也有效,需要将其转换为环境变量。
相关命令
env命令用于显示和管理环境变量:
- env:显示当前环境变量。
- env -i NAME=value COMMAND:不带环境变量启动命令。
- env -u NAME COMMAND:从环境变量中删除一个变量,然后运行命令。
示例代码
user@myzone ~> env // 显示全部环境变量,内容较多,略去
user@myzone ~> set a=5
user@myzone ~> echo $a
5
user@myzone ~> env -i PATH=mypath echo.sh
mypath
user@myzone ~> export a // 将a设置为环境变量
user@myzone ~> fish // 子Shell进程
user@myzone ~> echo $a
5
user@myzone ~> env -u a fish // 子Shell进程中再次打开一个Shell
user@myzone ~> echo $a
user@myzone ~> exit
user@myzone ~> exit
echo.sh是一个简单的脚本,功能是显示PATH的值:
#!/bin/sh
echo $PATH
可以看到,运行echo.sh时,PATH已被env命令修改。
export命令
export命令用于将普通变量转换为环境变量。转换后的变量不仅在当前Shell中有效,还会传递给其子进程。
user@myzone ~> set val=3
user@myzone ~> export val // 转换为环境变量
user@myzone ~> fish // 子Shell进程
user@myzone ~> echo $val
3
由于export将val转换为环境变量,子Shell中也有这个val,而配置文件中没有val,因此子Shell中的val是从调用它的Shell中继承的。
其他命令
set、unset和echo命令用于变量的管理和显示:
- set:显示所有变量。
- unset:删除变量。
- echo:显示变量的值。
需要注意的是,不同的Shell命令可能有所不同,具体使用方法请参考相应Shell的手册页(man page)。