bash shell用一个叫做环境变量的特性来存储有关shell会话和工作环境的信息。
全局环境变量
这对shell 会话和所有生成的子shell都是可见的。局部变量只对创建他们的shell可见。
系统环境变量基本上都是大写的,以区分普通用户的环境变量。
要查看全局变量,可以使用env或者printenv
要查看个别的环境变量,使用printenv命令
$ printenv HOME /home/Christine
也可以使用echo命令来查看变量的值,这时是在引用某个环境变量的值,必须在变量前面加一个美元符号($),这能够使这个引用的变量作为命令的参数。
全局变量可作用于进程所有的子shell。
局部环境变量
这只能在他们的进程中可见。Linux也默认定义了标准的局部环境变量。自己也可以定义环境变量,这被用户自定义局部变量。
Linux系统中并没有只显示局部环境变量的命令。set命令会显示某个特定进程的设置的所有的环境变量,包括局部变量、全局变量、用户自定义变量。
env、printenv和set命令之间的区别在于前两个命令不会对变量进行排序,也不会输出局部变量和用户自定义变量。
设置用户定义变量
设置局部用户定义变量
$ echo $my_variable $ my_variable=Hello $ $ echo $my_variable
注意:
- 如果要给变量赋一个含有空格的字符串的值,必须使用单引号来界定,如my_variable="hello world" 。
- 变量名、等号和值之间没有空格。
- 如果生成了另外一个shell,它在子shell中就不可用了。
所有的环境变量全部使用大写,这是bash shell的标准惯例。如果是自己创建的局部变量或者是shell脚本,请使用小写字母。
设置全局环境变量
在设定全局环境变量的进程所创建的子进程中,该变量都是可见的。创建环境变量的方法是先创建一个局部变量,然后再把它导入到全局变量中。
$ my_variable="I am a Global now" $ $ export my_variable $ echo $ my_variable I am a Global now $ bash $ $ echo $ my_variable I am a Global now $ exit exit
修改子shell中的全局环境变量并不会影响到父shell中变量的值,子shell甚至无法使用export命令改变父shell中全局环境变量的值,父shell的中全局环境变量依旧保留原先的值。
删除环境变量
使用unset命令删除,注意不要使用$。
$echo $my_variable I am Global now $ unset my_variable $ $ echo $my_variable $
如果要用到变量,使用$,如果要操作变量,不使用$。这条规则的例外就是printenv显示某个变量的值。
在处理全局环境变量的时候,如果你在子进程中删除了一个全局环境变量,这只对子进程有效,和修改变量一样。
设置PATH环境变量
PATH环境变量定义了用于进行命令和程序查找的目录,目录之间使用:进行分割,你只需引用原来的PATH的值,然后再给这个字符串添加新目录就行了。
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games $ $ PATH=$PATH:/home/christine/Scripts $ /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/christine/Scripts
注意:如果希望子shell也能找到你的程序的位置,一定要记得把修改后的PATH环境导出。
注意:对PATH变量的修改只能持续到退出或重启系统。