首先,要理解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

测试结果如下:

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

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

shell变量赋值进阶的更多相关文章

  1. [置顶] shell变量赋值-linux

    Shell变量赋值 命名须规则: 1)使用变量无需事先声明 2)首个字符必须为字母(a-z,A-Z) 3)中间不能有空格,可以使用下划线(_) 4)不能使用标点符号 5)不能使用bash里的关键字(可 ...

  2. shell变量赋值 不能有空格的原因

    典型例子: a=date echo $a      成立 a =date echo $a     不成立 其实原因很简单 shell在解释命令时的原则是第一个符号标记只能是程序或者命令,有空格的时候第 ...

  3. shell 变量赋值运算

    .变量赋值: name=lbg 等号前后不能有空格 name="Lebron James" 变量值中有空格要用双引号 echo ${name} 用${}更保险 shopt -s - ...

  4. Shell变量知识进阶

    一,Shell中特殊且重要的变量 $0结合dirname和basename分别取出脚本名称和脚本路径 [root@192-168-3-163 scripts]# cat test.sh #!/bin/ ...

  5. 第三章:shell变量知识进阶

    特殊变量:位置变量大于9的时候,需要加上(),例如$(10)$*获取脚本的所有参数,如果不加""和$@是一样的效果,如果加上"",则表示所有参数组成一个字符串$ ...

  6. (转载)shell变量基础—shell自定义变量

    (转载)http://see.xidian.edu.cn/cpp/html/1494.html 一.Shell定义变量需要遵循的规则 Shell编程中,使用变量无需事先声明,同时变量名的命名须遵循如下 ...

  7. 精通awk系列(14):细说awk中的变量和变量赋值

    回到: Linux系列文章 Shell系列文章 Awk系列文章 awk变量 awk的变量是动态变量,在使用时声明. 所以awk变量有3种状态: 未声明状态:称为untyped类型 引用过但未赋值状态: ...

  8. Shell变量概述

    目录 1. Shell变量概述 1.定义变量,变量名=变量值.不能出现"-横杠"命令 2.引用变量,$变量名 3.查看变量,set显示所有变量,包括自定义变量和环境变量 4.取消变 ...

  9. Shell变量的定义与赋值操作注意事项

    1 shell变量是弱类型 * 声明变量不用声明类型 * 可以存储不同类型的内容 * 使用时要明确变量的类型 * 区分大小写 2 变量声明及赋值格式 2.1 格式  变量名=变量值 # 注意等号两侧不 ...

随机推荐

  1. 【Java GUI】Java GUI基金会

    AWT和Swing Swing是个AWT改进和扩展. 书写GUI规划.Swing和AWT曾效力.他们共存 Java基础类(JFC)于. 虽然AWT和Swing都提供了构造图形界面元素的类.但它们的虫药 ...

  2. ABP-N层架构

    ABP理论学习之N层架构   返回总目录 自从写这个系列博客之后,发现很多园友还是希望有个直接运行的demo,其实在github上就有官方的demo,我直接把这demo的链接放到这里吧,另外,我分析, ...

  3. Uva 10131 Is Bigger Smarter? (LIS,打印路径)

    option=com_onlinejudge&Itemid=8&page=show_problem&problem=1072">链接:UVa 10131 题意: ...

  4. Android源代码学习之六——ActivityManager框架解析

    ActivityManager在操作系统中有关键的数据,本文利用操作系统源代码,逐步理清ActivityManager的框架,并从静态类结构图和动态序列图两个角度分别进行剖析,从而帮助开发者加强对系统 ...

  5. zoj 3696 Alien's Organ(泊松分布)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3696 Alien's Organ Time Limit: 2 S ...

  6. POJ 1699 Best Sequence (DFS+预处理)

    意甲冠军:看图片是晶莹剔透的,正确的, N连接到第一序列(同样的序列部分).总序列获得最短. 主题链接:http://poj.org/problem?id=1699 ~~~~ 思路就是:将N个序列首尾 ...

  7. Nancy 框架学习

    Nancy 框架 1.是一个轻量级用于构建http相应的web框架: 2.与mvc类似,有自己的路由机制: 3.可以处理 DELETE ,  GET ,  HEAD ,  OPTIONS ,  POS ...

  8. 4.4、Libgdx用法查询执行环境相关性

    (原版的:http://www.libgdx.cn/topic/46/4-4-libgdx%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95%E6%9F%A5%E8%AF%A2% ...

  9. SharePoint Search之(两)持续抓取Continues crawl

    于SharePoint 2010与在先前的版本号.有两种类型的抓取,Full和Incremental.故名思议.Full Crawl 抓取的时间.该Content Source里面的内容再次攀升.In ...

  10. C++学习笔记13-类继承

    1.  类模板的 static 成员[不同于C#中的static] 类模板能够像随意其它类一样声明static 成员.下面代码: template <class T> class Foo ...