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

  • 相关阅读:
    ActiveMQ 即时通讯服务 浅析
    Asp.net Mvc (Filter及其执行顺序)
    ActiveMQ基本介绍
    ActiveMQ持久化消息的三种方式
    Windows Azure Virtual Machine (27) 使用psping工具,测试Azure VM网络连通性
    Azure China (10) 使用Azure China SAS Token
    Windows Azure Affinity Groups (3) 修改虚拟网络地缘组(Affinity Group)的配置
    Windows Azure Storage (22) Azure Storage如何支持多级目录
    Windows Azure Virtual Machine (26) 使用高级存储(SSD)和DS系列VM
    Azure Redis Cache (2) 创建和使用Azure Redis Cache
  • 原文地址:https://www.cnblogs.com/xupeiyuan/p/shell_variable_advance.html
Copyright © 2011-2022 走看看