bash shell用一个叫作环境变量(environment variable)的特性来存储有关shell会话和工作环境的信息。这项特性允许你在内存中存储数据,以便程序或shell中运行的脚本能够轻松访问到它们。这也是存储持久数据的一种简便方法。
在bash shell中,环境变量分为两类:
- 全局变量:全局环境变量对于shell会话和所有生成的子shell都是可见的。
- 局部变量:局部变量则只对创建它们的shell可见。
1 查看环境变量
printenv
查看全局变量- 后跟环境变量名,可查看个别环境变量的值。例:
printenv HOME
- 后跟环境变量名,可查看个别环境变量的值。例:
env
查看全局变量(env
有printenv
没有的功能)- 引用某个环境变量的值,在变量前面加
$
echo $HOME
使用echo显示变量值ls $HOME
变量作为命令行参数
set
显示所有环境变量,包括局部变量、全局变量以及用户定义变量
2 设置环境变量
- 规范:局部变量使用小写字母命名,全局变量使用大写字母命名
my_variable=Hello
创建局部变量- 等号两边不能有空格
- 变量名只能由英、数字以及下划线组成,而且不能以数字开头
my_variable="Hello World"
当变量内容带有特殊字符时(例如空格),需要加上单引号,内容中带有单引号用双引号
export my_variable
创建全局变量- 子shell中对全局变量的修改,不会反映到父shell中
unset my_variable
删除环境变量- 子shell中对全局变量的删除,不会反映到父shell中
- bash shell有一些默认的系统环境变量,这些变量已经定义好了(但不一定有值)
- 例:
HOME
PATH
BASH_ENV
BASH_VERSINFO
- 例:
PATH
环境变量定义了用于进行命令和程序查找的目录(使用外部命令时,shell必须搜索系统来找到对应的程序)PATH
中多个目录由:
分隔PATH=$PATH:/home/christine/Scripts
在原有的PATH
中继续增加目录
- 以上方法对环境变量的修改只能持续到退出或重启系统
3 持久化环境变量
- 启动shell的三种方式
- 登录时作为默认登录shell
- 作为非登录shell的交互式shell
- 作为运行脚本的非交互shell
- 登录shell
/etc/profile
bash shell默认主启动文件(登录系统时,执行该文件中命令)
- 导出了一些系统环境变量
- 遍历执行
/etc/profile.d
中所有sh
文件(一种环境变量持久化思路,不推荐直接改主启动文件)
- 根据登录的用户来决定的启动文件(在用户的
HOME
目录下)
$HOME
和~
的作用一样,表示当前用户的主目录- shell会按照按照下列顺序,运行第一个被找到的文件,余下的则被忽略
.bash_profile
.bash_login
.profile
- 以上文件一般会间接调用
.bashrc
文件
- 交互式shell进程,执行
.bashrc
文件- 执行
/etc/bashrc
文件 - 为用户提供一个定制自己的命令别名和私有脚本函数的地方。
- 执行
- 非交互式shell,检查
BASH_ENV
环境变量,该环境变量指定了启动时要执行的文件
4 数组变量
mytest=(one two three four five)
定义一个数组变量echo $mytest
只会展示数组变量的第一个值echo ${mytest[2]}
展示数组变量索引是2的值(从0开始)echo ${mytest[*]}
展示整个数组mytest[2]=seven
改变某个索引的值unset mytest[2]
删除某个索引的值(删除后那个位置上的值是空的,但是还在)unset mytest
删除整个数组