Shell学习之Bash变量详解(二)
Shell学习之Bash变量详解
目录
Bash变量
Bash变量注意点
用户自定义变量
环境变量
位置参数变量
预定义变量
Bash变量
1 2 3 4 | 用户自定义变量:在Bash中由用户定义的变量。 环境变量:这种变量中主要保存和系统操作环境相关的数据。 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。 |
Bash变量注意点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是 "2name" 则是错误的。 2. 在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。 3. 变量用等号连接值,等号左右两侧不能有空格。 4. 变量的值如果有空格,需要使用单引号或双引号包括。 5. 在变量的值中,可以使用 "\" 转义符。 6. 如果需要增加变量的值,那么可以进行变量值得叠加。不过变量需要用双引号包含 "$变量名" 或用${变量名}包含。 7. 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含。 8. 环境变量名建议大写,便于区分。 |
用户自定义变量
1 2 3 | 在用户当前的shell进程中使用 一般在 $HOME / .bash_profile 中定义。 也可以在命令行定义,但只在用户当前shell进程中有意义,如果在shell中启动另一个进程或退出,此值将无效。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 变量定义: name = "liyi" 变量叠加: name = 123 name = "$name" 456 name = ${name} 789 变量的调用 echo "$name" 或 echo ${name} 变量查看 set 变量删除 unset name |
环境变量
1 2 3 | 环境变量适用于所有用户进程 在 / etc / profile中进行定义 在用户进程使用前,必须用export命令导出;建议环境变量都大写。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 | 设置环境变量 export 变量名 = 变量值 查看环境变量取值 echo $var_name 查询变量 env 删除变量 unset变量名 注:该命令只是从当前用户进程中删除,不会从文件 / etc / profile删除 |
嵌入shell变量
1 2 3 4 5 | 一般来讲,BASH有一些预留的环境变量名,这些变量名不能做其他用 途,通常在 / etc / profile中建立这些嵌入的环境变量,但这不绝对,取决于用户 shell的变量列表: CDPATH; EXINIT; HOME; IFS; LOGNAME; MAIL; MAILCHECK; PATH; PS1; PS2; SHELL; TERMINFO; TERM; TZ |
重要环境变量详解
1 2 3 4 5 6 7 8 | PATH变量:系统查找命令的目录,当我们在执行命令时,系统会到这些目录去寻找命令,然后执行。 假设现在创建一个文件test.sh chmod 755 test.sh . / test.sh 如果你不想这么麻烦,怎么办? PATH = "PATH" : / root(后面为存放test.sh的目录) |
PS1变量
默认格式:
可以定义格式的例子:
1 2 3 4 5 | PS1 = '[\u@\t\w]\$ ' PS1 = '[\u@\@ \h \# \W]\$ ' PS1 = '[\u@\h \W]\$ ' |
总结:
使用命令定义的环境变量在下次重启就不会生效。
定义永久环境变量在/etc/profile文件中定义。
位置参数变量
我刚开始听到名字的时候,我就想到了python中sys.argv[]的功能,其实位置参数变量和它很相似。
都是接收外部参数,这个参数是用户从外部输入的,第一个$0为程序本身路径,从第二个参数起为用户输入的参数。
例子
1 2 3 4 5 | #!/bin/bash echo $ 0 echo $ 1 echo $ 2 echo $ 3 |
1 2 3 4 5 | #!/bin/bash num1 = $ 1 num2 = $ 2 sum = $(($num1 + $num2)) echo $ sum |
预定义变量
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?