bash变量

系统变量

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

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

自定义变量

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

    定义为全局变量 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="20202020abc2020"

    拼接变量 var=${var}_2020

    从尾部删除最小匹配 echo ${var%2020}

    从尾部删除最大匹配 echo ${var%%+(2020)} +(pattern) 正则中匹配分组1到多次

    从头部删除最小匹配 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} 大写转小写 echo ${parameter[@],}
${parameter,,pattern} 大写转小写 echo ${parameter[@],,}
posted @ 2025-01-26 16:35  mingtian是吧  阅读(16)  评论(0)    收藏  举报