根据变量的作用域可以将shell变量分为:全局变量、局部变量、环境变量,其中:
局部变量仅在当前shell进程中使用,不能在当前shell的子shell中使用,更无法在其他shell中使用。
全局变量则可在当前shell及其子shell中使用。
环境变量和全局变量通常等同。
局部变量仅限于当前shell中使用,不加export的自定义变量或declare声明的自定义变量都是局部变量。
全局变量适用于当前shell以及其派生出的任意子shell,子shell的子shell仍能使用这些变量。子shell继承父shell环境变量,并能一直传承,但不能反向传递,子shell对父shell变量的修改不会影响父shell。
通过export可将局部变量提升为全局变量/环境变量。例如:
子shell仅能读取父shell变量,无法修改或改变父shell变量值,即使修改也无影响。
要使export导出的全局变量持久生效,即关闭当前shell后再次打开,仍能使用该变量。此效果可通过修改配置文件实现。
修改配置文件后,需通过source配置文件路径+文件名称使用,或关闭当前shell,再打开。
持久生效的全局变量配置方法有两种:修改/etc/profile或/etc/bashrc文件,对所有用户生效;在用户目录下的.bash_profile或.bashrc文件增加变量,对单一用户生效,且除非从配置文件中删除。
使用printenv查询变量类型。
若变量不能通过printenv查询但可以通过set查询,则大概率是局部变量。在当前shell进入子shell后,若不能使用该变量,则证明该变量为局部变量。
温馨提示:答案为网友推荐,仅供参考