Linux环境变量学习心得:弄懂变量、PATH与数组
前言
刚接触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的基础内容,不管平时操作服务器还是写自动化脚本都离不开,分清临时和永久、全局与局部的区别,操作起来会省心很多。
