06-使用Linux环境变量

#Linux #shell #开发

6.1 环境变量

  • bash shell用一个叫作环境变量(environment variable)的特性来存储有关shell会话和工作环境的信息(这也是它们被称作环境变量的原因)。这项特性允许你在内存中存储数据,以便程序 或shell中运行的脚本能够轻松访问到它们。

  • 环境变量分为两类:

  • 全局变量

  • 局部变量

6.1.1 全局环境变量

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

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

  • env命令与printenv命令 查看全局变量,例:

$ printenv 
HOSTNAME=server01.class.edu 
SELINUX_ROLE_REQUESTED= 
TERM=xterm SHELL=/bin/bash HISTSIZE=1000 
[...] 
HOME=/home/Christine 
LOGNAME=Christine 
[...] 
G_BROKEN_FILENAMES=1 _=/usr/bin/printenv
  • printenv命令可以显示个别环境变量,env命令则不行,例:

$ printenv HOME 
/home/Christine 
$ 
$ env HOME 
env: HOME: No such file or directory 
$
  • echo命令也可以显示环境变量,须在变量前加 $ 符,例:

$ echo $HOME 
/home/Christine 
$
  • 在变量名前加上 $ 符可不仅仅是要显示变量当前的值。它能够让变量作为命令行参数。

6.1.2 局部环境变量

  • 局部变量则只对创建它们的shell可见。

  • 查看局部环境变量的列表有点复杂,在Linux系统并没有一个只显示局部环境变量的命令。

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

$ set 
BASH=/bin/bash 
[...] 
BASH_ALIASES=() 
BASH_ARGC=() 
BASH_ARGV=() 
BASH_CMDS=() 
BASH_LINENO=() 
BASH_SOURCE=() 
[...] 
colors=/etc/DIR_COLORS 
my_variable='Hello World' 
[...] 
$
可以看到,所有通过 printenv命令能看到的全局环境变量都出现在了set命令的输出中。 但在set命令的输出中还有其他一些环境变量,即局部环境变量和用户定义变量。
  • envprintenvset之间的差异:

  • set命令会显示出全局变量、局部变量以 及用户定义变量。它还会按照字母顺序对结果进行排序。

  • envprintenv命令同set命令的区别在于前两个命令不会对变量排序,也不会输出局部变量和用户定义变量。在这种情况下,envprintenv的输出是重复的。不过env命令有一个printenv没有的功能, 这使得它要更有用一些。

6.2 设置用户定义变量

  • 可以在bash shell中直接设置自己的变量。

6.2.1 设置局部用户定义变量

  • 一旦启动了bash shell(或者执行一个shell脚本),就能创建在这个shell进程内可见的局部变量了。可以通过等号给环境变量赋值,值可以是数值字符串。例:

$ my_variable=Hello 
$ 
$ echo $my_variable 
Hello
  • 如果要给变量赋一个含有空格的字符串值,必须用单引号来界定字符串的首和尾。

$ my_variable=Hello World 
-bash: World: command not found 
$ 
$ my_variable="Hello World" 
$ 
$ echo $my_variable 
Hello World 
$
所有的 环境变量名均使用 大写字母,这是bash shell的 标准惯例。如果是你自己创建的 局部变量或是 shell脚本,请使用 小写字母变量名区分大小写。在涉及 用户定义的局部变量时坚持使用 小写字母,这能够避免 重新定义 系统环境变量可能带来的灾难。
  • 变量名、等号和值之间没有空格,这一点非常重要。如果在赋值表达式中加上了空格, bash shell就会把值当成一个单独的命令:

$ my_variable = "Hello World" 
-bash: my_variable: command not found 
$
  • 设置了局部环境变量后,就能在shell进程的任何地方使用它了。但是,如果生成了另外一个 shell,它在子shell中就不可用。

  • 类似地,如果你在子进程中设置了一个局部变量,那么一旦你退出了子进程,那个局部环境变量就不可用。

6.2.2 设置全局环境变量

  • 在设定全局环境变量的进程所创建的子进程中,该变量都是可见的。创建全局环境变量的方法是先创建一个局部环境变量,然后再把它导出到全局环境中。

  • export命令 将局部环境变量导出到全局环境中,变量名前面不需要加$。

$ my_variable="I am Global now" 
$ 
$ export my_va

你可能感兴趣的:(linux,bash)