shell脚本中变量替换

shell脚本中变量替换
  1. 如果变量字符前面使用感叹号,可以实现对变量的间接引用,而不是返回变量本身的值,但只能实现一层间接引用

    [root@mao_aliyunserver ~]# god=mao
    [root@mao_aliyunserver ~]# people=god
    [root@mao_aliyunserver ~]# echo ${people}
    god
    [root@mao_aliyunserver ~]# echo ${!people}
    mao
    
  2. 变量替换可以测试变量是否存在及是否为空,并根据不同的语法格式进行不同的操作

    # ${变量名:-默认值} -> 如果变量未定义或为空,则返回默认值,否则返回变量值
    [root@mao_aliyunserver ~]# echo ${a}
    
    [root@mao_aliyunserver ~]# echo ${a:-mao}
    mao
    [root@mao_aliyunserver ~]# echo ${a}
    
    # ${变量名:=默认值} -> 如果变量未定义或为空,则返回默认值,并且会把默认值赋给变量,否则返回变量值
    [root@mao_aliyunserver ~]# echo ${b}
    
    [root@mao_aliyunserver ~]# echo ${b:=mao}
    mao
    [root@mao_aliyunserver ~]# echo ${b}
    mao
    # ${变量名:?错误信息} -> 如果变量未定义或为空,则通过标准错误返回错误信息,否则返回变量值
    [root@mao_aliyunserver ~]# echo ${c}
    
    [root@mao_aliyunserver ~]# echo ${c:?变量值c为空或没有赋值}
    -bash: c: 变量值c为空或没有赋值
    [root@mao_aliyunserver ~]# echo ${c}
    
    # ${变量名:+默认值} -> 如果变量未定义或为空,则返回空,否则返回默认值
    [root@mao_aliyunserver ~]# echo ${d}
    
    [root@mao_aliyunserver ~]# echo ${d:+mao}
    
    [root@mao_aliyunserver ~]# echo ${d}
    
    [root@mao_aliyunserver ~]# d=pipi
    [root@mao_aliyunserver ~]# echo ${d:+mao}
    mao
    
  3. 变量替换还可以完成字符串切割及掐头去尾功能,详细情况见之前的一篇博客

    对字符串变量取值的处理一_请不要卷我的博客-CSDN博客

  4. 变量替换还可以帮助我们查找变量、统计变量内容和对变量内容进行替换操作

    # ${变量名^^匹配字符}: 将变量值中的匹配字符替换为大写,不写匹配字符就替换所有字符,只写一个^只替换第一个
    [root@mao_aliyunserver ~]# word=myPDD
    [root@mao_aliyunserver ~]# echo ${word^^}
    MYPDD
    [root@mao_aliyunserver ~]# echo ${word^}
    MyPDD
    [root@mao_aliyunserver ~]# echo ${word^y}
    myPDD
    # ${变量名,,匹配字符}: 将变量值中的匹配字符替换为小写,不写匹配字符就替换所有字符,只写一个,只替换第一个
    [root@mao_aliyunserver ~]# echo ${word,,}
    mypdd
    [root@mao_aliyunserver ~]# echo ${word}
    myPDD
    
注意事项
  • 使用变量替换的方式获取需要的输出一般都不会改变变量自身的值