概述:现代编程语言最重要的一个特点就是“变量”的使用。Shell 作为一门脚本语言,“变量”在里面的重要程度不言而喻。本文将从三个方面来对 Shell 中的变量来进行划分。
一、按作用划分:
- 系统变量:系统为完成各种功能而定义的变量,例如 PATH(可执行命令的搜索路径)、LANG(系统语系)、PS1(主提示符)、PS2(次提示符) 等等;
- 用户变量:用户自定义的变量,多用于 Shell 脚本当中;
二、按作用范围划分:
- 环境变量:在“当前 Shell”及其“子孙 Shell”中生效的变量(!!注意,在“当前 Shell ”的“父 Shell”中是不起作用的);
- 普通变量:仅在“当前 Shell”中有效的变量;
三、按存活时间划分:
- 永久变量:写入在“初始化配置文件”中的变量(主要的初始化配置文件:系统级别:/etc/profile、/etc/bashrc、/etc/profile.d/*.sh。用户级别:~/.bash_profile、~/.bashrc);
- 临时变量:临时定义或修改的变量,用户一旦退出,变量立即消失;
四、变量的特点:
(这里要区分“用户”和“账户”的概念,用户是指“登录进系统的人”,账户是指“系统用于确定用户的信息”。—个人理解)
- 隔离性:Linux 是一个多用户系统,意味着多个用户可以同时登录,还有就是,多个用户甚至可以使用同一个“账户”进行登录,这时候,“隔离”就显得尤为重要。
举个栗子,用户“老张”使用账户“user_1”登录进系统,将指定家目录的变量 HOME 删除($ unset HOME),那么在用户“老张”看来,变量 HOME 就无法再使用了。此时,用户“老李”同样使用账户“user_1”登录进系统,但在“老李”看来,HOME 变量是可以使用的。(前提是不修改“初始化配置文件”)。
后记:总结 Tony 老师的观点,结合个人的看法,望水友们轻拍。