Linux环境变量完整知识点梳理
一、什么是环境变量环境变量以变量名值的形式存储数据由操作系统和Shell维护用来保存会话信息、系统配置、用户相关信息系统内所有程序、Shell脚本都可以直接读取使用。Bash依靠环境变量记录当前工作环境的各类数据整体分为系统自带预设变量、用户手动自定义变量两大类。二、系统默认内置环境变量Bourne基础通用变量HOME代表当前登录用户的家目录PATH是命令搜索路径多个目录之间使用冒号分隔PWD记录当前所处的工作目录PS1是终端主提示符PS2是换行后的次提示符IFS是用于分割文本内容的分隔字符CDPATH为cd命令提供备选搜索目录MAIL和MAILPATH用来存放用户邮箱文件地址Shell会自动检测是否收到新邮件。Bash专属内置变量UID和EUID分别对应用户真实ID与有效IDRANDOM可以随机生成0到32767之间的数字BASH保存当前运行Shell程序的完整路径BASH_ALIASES是存放自定义别名的数组GROUPS存储当前用户所属的所有用户组LINES代表终端窗口可视行数。三、全局变量与局部变量区分全局环境变量能够在父Shell以及它创建的所有子Shell中访问系统自带的默认变量全部属于全局变量。查看全局变量可以执行env或者printenv命令如果只想查看单个变量直接使用printenv搭配变量名也可以用echo $变量名读取变量内容读取变量时必须在变量前添加美元符号。实操验证方式终端输入bash创建子Shell执行echo $HOME父子Shell读取到的变量数值完全一致。局部环境变量仅能在创建它的当前Shell内使用新开子Shell无法读取。Linux没有单独查看局部变量的专用指令set命令会输出当前进程下所有变量包含局部变量、全局变量、自定义变量输出内容会自动按字母顺序排序。四、自定义变量操作局部/全局创建局部变量语法为变量名值等号左右不能添加任何空格。如果赋值内容包含空格需要用单引号或者双引号包裹完整字符串。局部变量仅当前窗口生效进入子Shell后无法读取该变量退出子Shell回到原窗口变量依旧保留。将局部变量转为全局变量先定义局部变量再使用export命令导出变量就会变成全局变量子Shell可以正常读取。需要注意在子Shell内部修改全局变量的数值只会作用于当前子进程不会改变父Shell中原变量的内容。删除自定义变量使用unset加上变量名即可删除变量操作变量时不需要加美元符号只有读取变量内容时才需要使用$。永久保存自定义变量直接在命令行创建的变量关闭Shell或者重启系统后会直接消失。想要永久生效需要编辑用户配置文件~/.bashrc在文件末尾写入export配置语句保存后执行source ~/.bashrc刷新配置立刻生效。五、PATH环境变量核心知识点PATH的作用是当我们在终端输入外部命令时Shell会自动依次检索PATH内记录的所有目录寻找对应的可执行程序。执行echo PATH可以查看当前所有搜索目录目录之间依靠冒号隔开。临时新增程序目录到PATHexport PATHPATH:自定义目录路径这种修改仅本次会话有效。永久新增目录需要写入~/.bashrc文件刷新配置后长期生效。六、Shell登录启动配置文件持久化环境变量登录Shell启动时会自动读取多份配置文件加载环境变量。系统全局配置文件为/etc/profile所有用户登录都会读取文件内部会加载/etc/bash.bashrc以及/etc/profile.d目录下所有sh脚本统一配置全系统环境。用户专属配置文件仅对当前账号生效读取优先级从高到低分别是/.bash_profile、/.bash_login、~/.profile这类文件一般会自动加载.bashrc我们日常自定义变量、修改PATH基本都写在.bashrc中。执行ls -a ~可以查看家目录下所有隐藏配置文件。七、Bash数组变量Bash仅支持一维数组使用括号定义数组数组内多个元素用空格分隔数组下标从0开始计数。读取单个数组元素格式为{数组名[下标]}使用{数组名[*]}可以一次性读取数组全部内容直接赋值下标可以修改对应位置元素unset 数组[下标]可以删除单个元素删除后该下标位置会保留unset 数组名能够直接删除整个数组。