6环境变量

环境变量:
为什么存在?存储在哪里?怎样使用?
特殊的环境变量:数组变量

为什么使用环境变量?这项特性允许在内存中存储数据,这也是存储持久数据的一种简便方法。高速读取,高速存储。

分两类:全局变量、局部变量。

全局:
env
printenv USER/echo $USER

全局变量可用于进程的所有子shell

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

set 显示所有的变量。

可以通过等号给环境变量赋值,值可以是数值或字符串。记住,变量名、等号和值之间没有空格.

如果要给变量赋一个含有空格的字符串值,必须用单引号来界定字符串的首和尾。--单引号强引用,双引号弱引用。

在涉及用户定义的局部变量时坚持使用小写字母,这能够避免重新定义系统环境变量可能带来的灾难。 --可以使用驼峰命名法

创建全局环境变量的方法是先创建一个局部环境变量,然后再把它导出到全局环境中。通过export命令来完成,变量名前面不需要加$ 。

修改子shell中全局环境变量并不会影响到父shell中该变量的值。
子shell甚至无法使用export命令改变父shell中全局环境变量的值,也无法unset删除全局环境变量的值。

在unset命令中引用环境变量时,记住不要使用$。
记住一点就行了:如果要用到变量,使用$;如果要操作变量,不使用$。这条规则的一个例外就是使用printenv显示某个变量的值。

PATH变量追加路径:
PATH=$PATH:/newpath

将单点符追加到PATH变量貌似很实用:
PATH=$PATH:.

bash检查的启动文件取决于启动bash shell的方式:
1.登录时作为默认登录的shell
2.作为非登录shell的交互式shell
3.作为运行脚本的非交互式shell

shell会按照按照下列顺序,运行第一个被找到的文件,余下的则被忽略:
$HOME/.bash_profile
$HOME/.bash_login
$HOME/.profile
注意,这个列表中并没有$HOME/.bashrc文件。这是因为该文件通常通过其他文件运行的。

如果你的bash shell不是登录系统时启动的(比如是在命令行提示符下敲入bash时启动),那么你启动的shell叫作交互式shell。交互式shell不会像登录shell一样运行,但它依然提供了命令行提示符来输入命令。

如果bash是作为交互式shell启动的,它就不会访问/etc/profile文件,只会检查用户HOME目录中的.bashrc文件。--不知道怎么判断的

最后一种shell是非交互式shell。系统执行shell脚本时用的就是这种shell。
子shell可以继承父shell导出过的变量。
要记住,由父shell设置但并未导出的变量都是局部变量。子shell无法继承局部变量。
对 于 那 些 不 启 动 子 shell 的 脚 本 , 变 量 已 经 存 在 于 当 前 shell 中 了 。 所 以 就 算 没 有 设 置BASH_ENV,也可以使用当前shell的局部变量和全局变量。

最好是在/etc/profile.d目录中创建一个以.sh结尾的文件。把所有新的或修改过的全局环境变量设置放在这个文件中。--因为系统启动时会遍历/etc/profile.d/*sh脚本

数组变量:
要给某个环境变量设置多个值,可以把值放在括号里,值与值之间用空格分隔。

有时数组变量会让事情很麻烦,所以在shell脚本编程时并不常用。
对其他shell而言,数组变量的可移植性并不好,如果需要在不同的shell环境下从事大量的脚本编写工作,这会带来很多不便。
有些bash系统环境变量使用了数组(比如BASH_VERSINFO ),但总体上不会太频繁用到。

猜你喜欢

转载自blog.51cto.com/13690643/2536735