bash变量
系统变量
系统变量一般为大写字母定义
| 内置变量 | ||
|---|---|---|
PS1 |
终端提示符 | |
PWD |
当前路径 | |
OLDPWD |
上一个路径 | |
IFS |
输入分隔符 | IFS=: IFS=$'\t' IFS=$'\n' 换行符 IFS=$'\n':, 多个分隔符 |
OFS |
输出分隔符 | |
RANDOM |
随机数 | echo $RANDOM |
PATH |
环境变量路径 | |
USER |
用户名 | |
HOSTNAME |
主机名 |
自定义变量
- 定义变量
-
声明变量
var="hello world"定义为全局变量
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="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[@],,} |
浙公网安备 33010602011771号