- 本地变量
- 环境变量
- 局部变量
一、本地变量
我们在命令行中定义的变量是局部变量,它是不会永久保留的,会随着shell的切换 而丢失 当前存储的变量。如图所示。
当我们在bash中定义变量name并赋值,退出当前bash进程后,重新进入bash,想再次获取我们定义的name,发现已经消失。说明shell进程中 的变量,随着进程的切换,变量丢失。
二、环境变量
也称为全局变量,针对当前shell以及其任意子进程,环境变量也分自定义、内置两种。
1、内置变量是Shell解释器或者操作系统提前定义好的变量来供我们使用,一般都是大写的。
如: $USER $HOME $PWD $SHELL
2、自定义变量
用户根据自己需求进行自定义变量。
如: name="王大"
下图显示,我们在环境变量(父)中定义一个变量后,进入一个bash进程(子)中,想要获取变量,发现没有,当我们返回到环境变量中,获取变量,获取成功。
既说明了不同作用域中获取变量的权限是不同的,又说明了环境变量中的变量是 可以存储的,只有当重启虚拟机才会丢失。
我们在环境变量中定义的变量,子bash中仍然可以访问,当我们在子bash进程中定义和环境变量名相同的变量,会被覆盖,输出为子bash进程中的变量。
当我们在子进程中使用unset 变量名,来撤销这个变量,子bash进程中无法获取自己进程的变量和环境进程中的变量。
三、局部变量
针对在shell函数或是shell脚本中定义
就是我们在.sh的shell脚本中或者shell函数中定义的变量,完成我们的某种需求,如: #!/bin/bash
name="王大锤"
echo "$name"
变量获取的 时候,只会获取离自己近的作用域的变量。
当自己的定义域内没有该变量 ,但是要输出该变量,这时候会自动向大的变量进行寻找,然后输出。
1.每次调用bash/sh解释器执行脚本,都会开启一个子shell,因此不保留当前的shell变量,通过pstree命令检查进程树
2.调用source或者点符号,在当前shell环境加载脚本,因此保留变量3、全局变量和局部变量类似父子级别的关系。不同的作用域下,可以拿到的值是不同的。
4、本地变量:就是只针对当前shelll进程的变量。