shell变量内字符处理${}
1. 判断变量是否存在
不存在则赋值
#如果变量不存在,则赋值4096
mem_size_MB=${mem_size_MB:-4096}
mem_size_MB=${mem_size_MB:-"4096 MB"}
2. 计算变量长度
echo ${#var}
3. 子串提取
3.1. 变量值从后往前字符截取
$(var【变量名】:【冒号】 【空格】 -【短横线】【保留位数】)
#取变量值后12个字符
QoS=000000000000$(echo "1024 * $4" |bc)
NIC_QoS=aaaaaaaa-aaaa-aaaa-aaaa-${QoS: -12}
3.2. 变量值从前往后截取字符串
取变量值前12个字符
#从位置0开始,提取长度为12的子字符串 substring=${var:0:12}
3.3. 中段截取
取变量值第5-12个字符
#从位置5开始,提取长度为7的子字符串
substring=${var:5:7}
4.字符替换
判断如果变量中存在该字符,则替换
4.1 替换第一个匹配项
hugemem_SIZE=${hugemem_SIZE/largeGB/large}
4.2. 替换所有匹配项
hugemem_SIZE=${hugemem_SIZE//GBGB/GB}
5. 删除变量内字段
5.1 删除匹配项
替换为空,即为删除
# 删除第一个匹配项 hugemem_SIZE=${hugemem_SIZE/GB/} # 删除所有匹配项 hugemem_SIZE=${hugemem_SIZE//GB/}
5.2 删除开头
# 删除前缀
#删除开头的large【最短匹配】
hugemem_SIZE=${hugemem_SIZE#large}
#删除开头的large【最长匹配】
hugemem_SIZE=${hugemem_SIZE##large}
5.3 删除结尾
%删除后缀
删除结尾的GB【最短匹配】
hugemem_SIZE=${hugemem_SIZE%GB}
删除结尾的GB【最长匹配】
hugemem_SIZE=${hugemem_SIZE%%GB}
5.4 示例
提取文件扩展名
string="file.txt" echo ${string##*.} # 提取扩展名( 输出:txt)
6. 大小写转换
lowercase=${var,,} # ,,转换为小写
uppercase=${var^^} # ^^转换为大写
7. 数组操作
array=("one" "two" "three") echo ${array[0]} # 输出 "one" (访问数组的第一个元素) echo ${array[@]} # 输出 "one two three" (输出数组的所有元素) echo ${#array[@]} # 输出 3 (获取数组的长度)
8. 变量值间接引用
通过变量名引用另一个变量的值
这个非常实用,真叫我梦里寻它千百度
[root@aliyun-3month ~]# var_01="(*v*)" [root@aliyun-3month ~]# varname="var_01" [root@aliyun-3month ~]# echo ${!varname} # 输出 "(*v*)" (*v*)