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

测试结果如下:
shell变量赋值进阶

unset和空字符串是无法直接比较的
shell变量赋值进阶

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

shell变量赋值进阶

shell变量赋值进阶

相关文章:

  • 2021-06-13
  • 2021-10-14
  • 2022-12-23
  • 2021-11-17
  • 2022-12-23
  • 2022-01-11
  • 2022-01-05
猜你喜欢
  • 2021-12-16
  • 2021-05-20
  • 2022-01-09
  • 2022-03-02
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案