bash变量
系统变量
系统变量一般为大写字母定义
内置变量 | ||
---|---|---|
PS1 |
终端提示符 | |
OLDPWD |
上一个路径 | |
IFS |
输入分隔符 | IFS=: IFS=$'\t' IFS=$'\n' 换行符 IFS=$'\n':, 多个分隔符 |
OFS |
输出分隔符 | |
RANDOM |
随机数 | echo $RANDOM |
PATH |
环境变量路径 | |
USER |
||
HOSTNAME |
自定义变量
- 定义变量
-
声明变量
var="hello word"
定义为全局变量
export var="hello world"
定义一个只有函数内生效的变量
local var="hello world"
- 查询变量
-
引用变量
echo ${var}
如果var不存在反回ERROR
echo ${var:-"ERROR "}
如果var存在返回ERROR,否则反馈空值
echo ${var:+"ERROR "}
如果var不存在返回ERROR,并把ERROR 赋值给var
echo ${var:="ERROR "}
变量截取(从第三位到结尾)
${var:2}
变量截取(从第三位开始,共截取两位)
${var:2:2}
变量长度
${#var}
或者expr length $var
-
修改变量
拼接变量
var=${var}_2020
从尾部删除最小匹配
echo ${var%2020}
从尾部删除最大匹配
echo ${var%%2020}
从头部删除最小匹配
echo ${var#2020}
从头部删除最大匹配
echo ${var##2020}
-
删除变量
unset var
数组
var=(`ls`) #定义修改数组中的任意一个值 var[0]=1 # 删除数组指定值 unset var[0] for ((i=1; i<=${#var[@]}; i++));do echo ${var[$i]};done
显示数组变量var的所有值 ${var[@]}
显示数组变量var的所有值 ${var[*]}
关联数组
declare -A dict dict["name"]="wangendao" dict["age"]=33 dict["sex"]="男" echo ${dict[@]} wangendao 33 男 echo ${!dict[@]} name age sex for i in ${!dict[*]};do echo $i : ${dict[${i}]};done
关联数组在awk 中的应用 netstat -ant|awk '{count[$NF]++} END{for (i in count){print count[i],i}}'
变量扩展
测试用例
parameter=(hello word aoo boo ooa oob)
参数扩展 | 解释 | 举例 |
---|---|---|
${parameter} |
变量引用 | |
${parameter:-word} |
变量不存在使用默认值 | |
${parameter:=word} |
变量不存为变量分配默认值 | |
${parameter:?word} |
Display Error if Null or Unset | |
${parameter:+word} |
变量存在则使用word | |
${#parameter} |
变量删除
参数扩展 | 解释 | 举例 |
---|---|---|
${parameter#word} |
Remove matching prefix pattern | |
${parameter##word} |
||
${parameter%word} |
Remove matching suffix pattern | |
${parameter%%word} |
||
${parameter/word} |
删除 |
变量替换
参数扩展 | 解释 | 举例 |
---|---|---|
${parameter/pattern/string} |
替换,类似sed | |
${parameter/#pattern/string} |
只匹配开头 | echo ${parameter/#o/z} |
${parameter/%pattern/string} |
只匹配结尾 | echo ${parameter/%o/z} |
变量子串
参数扩展 | 解释 | 举例 |
---|---|---|
${parameter:offset} |
变量截取 | |
${parameter:offset:length} |
索引
参数扩展 | 解释 | 举例 |
---|---|---|
${!name[@]} |
变量索引 | |
${!name[*]} |
变量索引 |
大小写转换
如果省略pattern 将匹配所有
参数扩展 | 解释 | 举例 |
---|---|---|
${parameter^pattern} |
小写转大写,只匹配开头 | echo ${parameter[@]^} |
${parameter^^pattern} |
小写转大写,匹配所有 | echo ${parameter[@]^^} |
${parameter,pattern} |
大写转小写 | |
${parameter,,pattern} |
大写转小写 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏