前言刚接触Linux的时候我一直有两个疑问为什么系统自带命令随便输就能跑自己写的小程序却要输完整路径临时定义的变量一关终端就没了。把环境变量整套实操做完后才理清背后逻辑下面分享完整知识点。一、环境变量基础概念环境变量就是一组名称值的数据系统和终端会话的信息全都存在这里。系统自带变量统一大写我们自己创建尽量用小写防止不小心覆盖系统配置出问题。按作用域分成全局、局部两种全局变量当前终端和新开的子shell都能读取像HOME、PATH、PWD都是系统自带全局变量。用env、printenv能查看所有全局变量echo $变量名可以单独打印某一个。子shell里修改全局变量只会改动副本不会影响父终端原本的值。局部变量只在当前窗口生效切到子shell就读取不到了。没有单独查看局部变量的命令输入set能把所有变量局部全局全部打印出来。定义时等号两边不能有空格内容带空格就用引号包起来关掉终端变量直接消失。二、自定义变量的创建与删除直接赋值就能生成局部变量但子shell访问不到如果想让子shell也共用加上export就能升级成全局变量。想要删掉变量使用unset注意命令后面直接写变量名不用加$符号。删除操作只对当前终端生效不会影响其他shell。三、PATH变量日常最常用的环境变量PATH里存放一堆目录用冒号隔开每次敲命令系统会顺着这些目录查找可执行程序。自己安装的程序不在默认路径里就需要手动追加目录export PATH$PATH:/自定义文件夹。这种方式只是临时生效重新打开终端就失效想要长期使用要写到配置文件里。四、实现变量永久生效的配置文件配置文件分系统、用户两类/etc/profile是系统级文件所有用户登录都会加载改动会影响整台机器一般不建议修改。~/.bashrc是当前用户专属文件每次打开终端都会自动读取自定义变量、PATH都写在这里最合适。写完配置执行source ~/.bashrc不用重启终端就能立刻生效。五、Shell一维数组使用bash只支持一维数组用括号包裹多个值下标从0开始计数。单独取某个元素写{数组[下标]}{数组[*]}可以一次性输出全部内容。直接给下标赋值就能修改内容unset配合下标可以删掉单个元素不加下标直接写数组名则会清空整个数组。总结全局变量能在父子shell互通局部变量仅当前窗口可用env查看全局变量set查看全部变量export导出全局unset删除变量。PATH决定命令检索路径可临时追加或写入配置永久保存。/etc/profile管控全系统环境~/.bashrc用来配置个人永久变量。shell数组支持增删改查是写脚本时很实用的工具。环境变量算是Linux的基础内容不管平时操作服务器还是写自动化脚本都离不开分清临时和永久、全局与局部的区别操作起来会省心很多。