zoukankan      html  css  js  c++  java
  • shell变量赋值进阶

    首先,要理解shell中变量的3种赋值情况:

    1. unset 例子. unset a
    2. 空字符串, null 例子. a=''
    3. 非空,即不是unset,并且不是空字符串 例子: a=1 or a=b

    然后,简单说明有冒号的情况:

    :=
    var=${str:="default"}  
    str 非空, var=$str; 否则var=default; str=default
    
    :-
    var=${str:-"default"}  
    str为unset或者空字符串,var=default,否则var=$str;
        这种一般是shell中设置默认值  
    
    
    :+
    var=${str:+"default"}  
    str 非空,var=default,否则var和str都为空字符串
    

    测试代码:

    #!/bin/bash
    var=before
    unset un_set
    null_str=
    str=1
    var=${un_set-"default"};echo 'var=${un_set-"default"};' "var=$var" " un_set=${un_set}"
    var=${null_str-"default"};echo 'var=${null_str-"default"};' "var=$var" " null_str=${null_str}"
    var=${str-"default"};echo 'var=${str-"default"};' "var=$var" " str=${str}"
    var=${un_set:-"default"};echo 'var=${un_set:-"default"};' "var=$var" " un_set=${un_set}"
    var=${null_str:-"default"};echo 'var=${null_str:-"default"};' "var=$var" " null_str=${null_str}"
    var=${str:-"default"};echo 'var=${str:-"default"};' "var=$var" " str=${str}"
    echo "-------------------"
    echo 
    
    var=${un_set+"default"};echo 'var=${un_set+"default"};' "var=$var" " un_set=${un_set}"
    var=${null_str+"default"};echo 'var=${null_str+"default"};' "var=$var" " null_str=${null_str}"
    var=${str+"default"};echo 'var=${str+"default"};' "var=$var" " str=${str}"
    var=${un_set:+"default"};echo 'var=${un_set:+"default"};' "var=$var" " un_set=${un_set}"
    var=${null_str:+"default"};echo 'var=${null_str:+"default"};' "var=$var" " null_str=${null_str}"
    var=${str:+"default"};echo 'var=${str:+"default"};' "var=$var" " str=${str}"
    echo "-------------------------"
    echo 
    
    var=${un_set="default"};echo 'var=${un_set="default"};' "var=$var" " un_set=${un_set}"
    unset un_set;null_str=;str=abc;
    var=${null_str="default"};echo 'var=${null_str="default"};' "var=$var" " null_str=${null_str}"
    unset un_set;null_str=;str=abc;
    var=${str="default"};echo 'var=${str="default"};' "var=$var" " str=${str}"
    unset un_set;null_str=;str=abc;
    var=${un_set:="default"};echo 'var=${un_set:="default"};' "var=$var" " un_set=${un_set}"
    unset un_set;null_str=;str=abc;
    var=${null_str:="default"};echo 'var=${null_str:="default"};' "var=$var" " null_str=${null_str}"
    unset un_set;null_str=;str=abc;
    var=${str:="default"};echo 'var=${str:="default"};' "var=$var" " str=${str}"
    echo "-------------------------"
    echo
    

    测试结果如下:
    var

    unset和空字符串是无法直接比较的
    null

    ${:-} 和 ${-}的实例应用:

    4

    5

  • 相关阅读:
    清除3389远程桌面连接记录的批处理
    Visual Studio Team Foundation Server 2013
    Build fast jar 打包,增加配置文件
    Asp.net MVC 出现“Failed to map the path '/'.”错误
    Java创建AD(Active Directory)域控制器用户 (未测)
    JSP/java 执行创建批处理文件,并执行批处理事务。
    域控密码策略
    项目感悟
    IE版本的标准定义
    VS编译后事件
  • 原文地址:https://www.cnblogs.com/xupeiyuan/p/shell_variable_advance.html
Copyright © 2011-2022 走看看