- 原值没设置赋值

var=${str-expr}

str 没有设值

unset str  var=${str-abc}

echo ${var}  ${str}

 abc     空值

str 设值

str=old_value   var=${str-new_value}

echo ${var}      ${str}

    old_value   old_value

str 设值为 空字符串 ""

str=""    var=${str-newValue}

echo ${var}  ${str}

    空字符串    空字符串


var=${str:-expr}

str 没有设值

unset str var=${str:-abc}

echo ${var} ${str}

    abc  空值

str 设值

str=old_value; var=${str:-new_value}

echo ${var}  ${str}

   old_value  old_value

str 设值为空串

str=""; var=${str:-new_value}

echo ${var} ${str}

    new_value  ""

总结:  str 的值始终不会改变。

       var 的值  str值存在则使用自己,否则使用赋给的值

       带上 : 表示加一个条件, 原值必须有效

________________________________________________________

+ 原值设值了,就赋值

var=${str+expr}

不设值

unset str; var=${str+new};

echo ${var} ${str}

    空值   空值


设非空值

str=old; var=${str+new}

echo ${var} ${str}

     new    old

设空值

str=""; var=${str+new};

echo ${var} ${str};

  new    空串

推断   var=${str:+expr};

不设值

unset str; var=${str:+new};

echo ${var} ${str}

    空值   空值


设非空值

str=old; var=${str:+new}

echo ${var} ${str}

     new    old


设空值

str=""; var=${str:+new};

echo ${var} ${str};

  空串    空串

—————————————————————————————————————————————————————————————

= 和 - 类似 没设置值时,才用新值; 但= 会同时修改str 变量的值

var=${str=expr}

不设值

unset str; var=${str=new};

echo ${var} ${str}

    new   new


设非空值

str=old; var=${str=new}

echo ${var} ${str}

     old    old

设空值

str=""; var=${str=new};

echo ${var} ${str};

  空串   空串

:

不设值

unset str; var=${str:=new};

echo ${var} ${str}

    new   new


设非空值

str=old; var=${str:=new}

echo ${var} ${str}

     old    old

设空值

str=""; var=${str:=new};

echo ${var} ${str};

  new   new

_____________________________________________

?

没设置

unset str; var=${str?"is unvalid"};

-bash: str: is unvalid

echo ${var} ${str};

     null  null

设非空值

str=old; var=${str?new_value};

echo ${str} ${var}

  old    old

设空串

str=""; var=${str?new};

echo ${str} ${var}

  空串   空串

其实这个? 主要是用来 当str 没有定义时发出警告信息的,没赋值功能。