# shell中的环境变量

环境变量中存储有关shell会话和工作环境的信息,允许用户在内存中存储数据,以便程序
或shell中运行的脚本能够轻松访问到它们。

# 全局变量

全局环境变量对于shell会话和所有生成的子shell都是可见的。

Linux系统在启用bash会话时就设置了一些全局环境变量。

系统环境变量基本上都是使用全大写字母,以区别于普通用户的环境变量。

要查看全局变量,可以使用 envprintenv 命令。

查看某个环境变量的值,

echo $HOME

或者:

printenv HOME

# 局部环境变量

局部环境变量,只能在定义它们的进程中可见。

Linux系统并没有一个只显示局部环境
变量的命令。

set命令会显示为某个特定进程设置的所有环境变量,包括局部变量、全局变量
以及用户定义变量。

# 创建环境变量

创建局部环境变量:

my_variable="I am Global now"

使用export命令可以将其变成全局变量:

export my_variable=$my_variable

# 删除环境变量

使用unset命令:

unset my_variable

# PATH环境变量

在shell命令行界面中输入一个外部命令时,shell必须搜索系统来找到对应
的程序。

PATH 环境变量定义了用于进行命令和程序查找的目录。

应用程序放置可执行文件的目录常常不在 PATH 环境变量所包含的目录中。解决的
办法是保证 PATH 环境变量包含了所有存放应用程序的目录。

export PATH=PATH:/xxx/sw/gcc/bin

为了让环境变量的作用持久化,需要了解在bash在启动时会检查的启动文件或环境文件。

启动bash shell有3种方式:

  • 登录时作为默认登录shell
  • 作为非登录shell的交互式shell
  • 作为运行脚本的非交互shell

登录shell会从5个不同的启动文件里读取命令:

  • /etc/profile文件是系统上默认的bash shell的主启动文件,系统上的每个用户登录时都会执行这个启动文件。
  • $HOME/.bash_profile
  • $HOME/.bashrc
  • $HOME/.bash_login
  • $HOME/.profile

变量设置放在/etc/profile文件中,可不是什么好主意。如果升级了所用的发行版,这个文件也会跟着更新,那所有定制过的变量设置就都没有了。

最好是在/etc/profile.d目录中创建一个以.sh结尾的文件。

使用数组管理环境变量:

myarray=(one two three)

# 首元素
echo $myarray

# 打印第三个元素
echo ${myarray[2]}

# 显示整个数组变量
echo ${myarray[*]}

# unset 命令后跟上数组可删除数组某个值
unset myarray[2]

# unset 命令后跟上数组名可删除整个数组
unset myarray