在初识Shell时,我们介绍过,Shell是一种弱类型语言。但是,Shell也是有变量类型的,但它的变量类型和C/C++的变量类型有点不一样。当我们运行Shell时,会同时存在三种变量:
- 本地变量:局部变量在脚本或者命令中定义,仅在当前Shell实例中有效,其他Shell启动的程序不能访问局部变量。
- 环境变量:所有的程序,包括Shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候Shell脚本也可以定义环境变量。
- Shell变量:Shell变量是由Shell程序设置的特殊变量。Shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了Shell的正常运行。
先来举一个例子:
我们在父shell上定义了一个变量,直接在交互式父shell中,访问是可以直接访问的。但是,在子脚本中访问,却没有访问到。
使用export命令将myval变量导成环境变量,发现直接就可以显示出来了。
- 本地变量
只存在于当前Shell进程,用set命令可以显示当前Shell进程中定义的所有变量(包括本地变量和环境变量)和函数。上面的myval在没有被export时,就是父Shell内的一个本地变量。环境变量是任何进程都有的概念,而本地变量是Shell特有的概念。
- 环境变量
环境变量是可以从父进程传给子进程,因此Shell进程的环