zoukankan      html  css  js  c++  java
  • shell中变量的测试与替换


    在某些时刻我们经常需要判断某个变量是否存在,若变量存在则使用既有的设置,若变量不存在则给予一个常用的设置。

    (1) 变量未被设置或者内容为空,则替换为新的内容.

    new_var=${old_var-content}
    

    范例一:测试一下是否存在 username 这个变量,若不存在则给予 username 内容为 root

    [root@www ~]# echo $username 
               <==由于出现空白,所以 username 可能不存在,也可能是空字符串 
    [root@www ~]# username=${username-root} 
    [root@www ~]# echo $username 
    root       <==因为 username 没有设定,所以给予为 root的内容。 
    [root@www ~]# username="vbird tsai" 
    [root@www ~]# username=${username-root} 
    [root@www ~]# echo $username 
    vbird tsai <==因为 username 已经设定了,所以使用旧有的设定而不以 root取代
    上面的范例中,若username已经设定为空串的话,则不会替换,如果要想它进行次替换就可以用加上“:”,即# username=${username:-root}
    

    范例二:若 username 未设定或者为空字符串,则将 username 内容设定为 root

    [root@www ~]# username="" 
    [root@www ~]# username=${username-root} 
    [root@www ~]# echo $username 
          <==因为 username 被设定为空字符串了!所以当然还是保留为空字符串! 
    [root@www ~]# username=${username:-root} 
    [root@www ~]# echo $username 
    root  <==加上『 : 』后若变量内容为空或者是未设定,都能够以后面的内容替换。
    

    (2) "-"是不影响旧的内容,若想要替换新的内容则用“=”

    [root@www ~]# unset str; var=${str=newvar} 
    [root@www ~]# echo var="$var", str="$str" 
    var=newvar, str=newvar  <==因为 str 不存在,所以 var/str 均为 newvar 
    
    测试:如果 str 已存在了,测试一下 var 会发怎样? 
    [root@www ~]# str="oldvar"; var=${str=newvar} 
    [root@www ~]# echo var="$var", str="$str" 
    var=oldvar, str=oldvar  <==因为str存在,所以var等于str的内容
    

    (3) 如果我想知道,如果旧变量不存在时,整个测试就告知我『有错误』,此时就能够使用问号

    [root@www ~]# unset str; var=${str?无此变量} 
    -bash: str: 无此发量    <==因为 str 不存在,所以输出错误讯息 
    

    (4) 总结

    • "-" :新内容的值会赋予没有设定的变量,不会影响已经设定的变量,如旧变量为空字符串,那么新变量仍为空字符串;
    • ":-":变量未设定和变量为空字符串将视为同一种情况,新内容的值会直接赋予给变量;旧变量已设定为非空字符串得到情况除外;
    • "+":与"-"情况相反,只会影响已经设定的变量,新内容的值会直接赋予给变量;
    • ":+":与":-"情况相反,变量未设定和变量为空字符串将视为同一种情况,不会受到影响,旧变量已设定为非空字符串得到情况除外;
    • "=":与"-"类似,新内容的值会赋予未设定的变量,同时会覆盖掉旧变量的值;
    • ":=":与":-"类似,新内容的值会直接赋予给变量,同时会覆盖掉旧变量的值,旧变量已设定为非空字符串得到情况除外;
    • "?":如果我想知道,如果旧变量不存在时,整个测试就告知我『有错误』,此时就能够使用问号;
    • ":?":如果我想知道,如果旧变量不存在或被设置为空字符串时,整个测试就告知我『有错误』,此时就能够使用":?"。
    变量设定方式 str没有设定 str为空字符串 str已设定为非空字符串
    var=${str-expr} var=expr var= var=$str
    var=${str:-expr} var=expr var=expr var=$str
    var=${str+expr} var= var=expr var=expr
    var=${str:+expr} var= var= var=expr
    var=${str=expr} str=expr
    var=expr
    str不变
    var=
    str不变
    var=$str
    var=${str:=expr} str=expr
    var=expr
    str=expr
    var=expr
    str不变
    var=$str
    var=${str?expr} expr输出至stderr var=
    expr无输出
    var=$str
    expr无输出
    var=${str:?expr} expr输出至stderr expr输出至stderr var=$str
    expr无输出
  • 相关阅读:
    ORACLE常用SQL优化hint语句
    TestNG 入门教程
    博客迁移
    WebMvcConfigurer
    Nginx 配置
    SpringBoot部署
    MyBatis 动态 SQL
    Spring Boot 验证表单
    Spring Boot session与cookie的使用
    Spirng MVC 重定向传递对象
  • 原文地址:https://www.cnblogs.com/BinBinStory/p/7535302.html
Copyright © 2011-2022 走看看