bash变量

系统变量

系统变量一般为大写字母定义

内置变量
PS1 终端提示符
OLDPWD 上一个路径
IFS 输入分隔符 IFS=:
IFS=$'\t'
IFS=$'\n' 换行符
IFS=$'\n':, 多个分隔符
OFS 输出分隔符
RANDOM 随机数 echo $RANDOM
PATH 环境变量路径
USER
HOSTNAME

自定义变量

  • 定义变量
  1. 声明变量 var="hello word"

    定义为全局变量 export var="hello world"

    定义一个只有函数内生效的变量 local var="hello world"

  • 查询变量
  1. 引用变量 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} 大写转小写
posted @   mingtian是吧  阅读(2)  评论(0编辑  收藏  举报
编辑推荐:
· 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的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示