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

原文地址:https://www.cnblogs.com/xupeiyuan/p/shell_variable_advance.html