Linux的bash变量
什么是变量
变量是计算机内存的单元,其中存放的值可以改变。
当 shell 脚本需要保存一些信息时,如一个文件名或者一个数字,就把它放在一个变量里。每个变量都有一个名字,可以根据名字来引用变量。
使用变量可以保存有用信息,使系统获知用户的相关设置,变量也可以保存暂时信息。
变量的声明规则
变量的分类
用户自定义变量的用法
用户自定义变量也就是本地变量。只在当前 shell 中生效。
变量定义
变量名=变量值
变量调用
$变量名
变量查看
set
set 是查看当前系统中定义的所有变量。
变量删除
unset 变量名
环境变量的用法
环境变量主要保存的是和系统操作环境相关的变量。
前面讲的用户自定义变量(本地变量)只在当前shell 中生效,而环境变量会在当前shell和这个shell的所有子shell当中生效,如果把环境变量写入相应的配置文件中,那么这个环境变量就会在所有的shell中生效。
通过 pstree 命令区分当前shell 的级别是父还是子
声明环境变量
export 变量名=变量值
查询所有环境变量
env
前面讲的 set 命令是查看所有变量,而 env 是查看环境变量。
查看、删除指定环境变量
$变量名 #查看环境变量
unset 变量名 #删除环境变量
这两个和本地变量一样。
系统查找命令的路径环境变量 $PATH
我们知道调用命令必须要是在当前目录,或者是用绝对路径进行。但是实际上我们调用某个命令直接使用命令名就可以了,比如cd,ls等等这些常用的,这是为什么呢?
原因就是在 PATH里面我们已经定义好了,我们执行某个名称的命令时,系统会先去PATH里面找,如果找不到才会报找不到命令错误。
首先看一下$PATH:
可以看到,$PATH 里面都是保存的一些路径,然后通过:分隔。
前面我们写过一个 hello.sh 的脚本,我们知道要想执行它,必须首先赋予可执行权限,然后要么在当前目录通过./hello.sh来执行,要么通过绝对路径/tmp/hello.sh来执行。如果我们想直接通过 hello.sh 来执行呢?
解决办法就将hello.sh的所在路径添加到 $PATH 变量中,如下:
定义系统提示符的变量 $PS1
位置参数变量的用法
预定义变量的用法
其实预定义变量也是位置参数变量的一种,有如下几种用法:
声明变量类型 declare
数值运算的三种方法
(1)declare -i
(2)expr 或 let 数值运算工具
(3)((运算式))或((运算式))或[运算式]
运算符及其优先级顺序
变量测试与替换
环境变量配置文件
前面我们在讲环境变量的时候,我们将脚本的路径加入PATH路径中,然后就可以直接通过脚本的名称来执行脚本。但是如果系统重启之后,发现又必须要重新加入到PATH路径中,然后就可以直接通过脚本的名称来执行脚本。但是如果系统重启之后,发现又必须要重新加入到PATH 变量中才可以。那么有没有让它一直生效的方法呢?
解决办法就是在环境变量配置文件中加入脚本的路径。
环境变量配置文件中主要定义对系统的操作环境生效的系统默认环境变量,比如 PATH,HISTSIZE,PS1,HOSTNAME等默认环境变量。分别有以下配置文件:
下图是环境变量文件的读取顺序:(用户每次重新登录的时候就会重新读取下面的配置文件)
我们知道 PATH变量,用户每次登录,就会从上面的文件读取顺序读取所有配置文件,最后得到PATH变量,用户每次登录,就会从上面的文件读取顺序读取所有配置文件,最后得到PATH 变量的值。
注意:越往后面的配置文件,里面配置的变量内容优先级越高。
参考: |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!