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

  • 相关阅读:
    poj2823单调队列认知
    有关二叉树的三序遍历的题目
    hdu4757 可持续字典树
    ZOJ2532判断边是否是割集中的边
    poj2455 k条路最小化最长边
    乘法逆元模板
    poj1699 KMP+壮压DP
    Innodb存储引擎——非聚集索引
    java集合框架笔记
    jvm垃圾回收
  • 原文地址:https://www.cnblogs.com/xupeiyuan/p/shell_variable_advance.html
Copyright © 2011-2022 走看看