$ {var:= default} vs $ {var:-default} - 有什么区别?

时间:2014-06-25 09:59:15

标签: bash variables

似乎两者完全相同。

在这两种情况下,空$var都会返回defaultvalue

$ var=
$ echo ${var:-defaultvalue}
defaultvalue

$ var=
$ echo ${var:=defaultvalue}
defaultvalue
在以下两种情况下,

非空$var会返回

$ var=var
$ echo ${var:-defaultvalue}
var

$ var=var
$ echo ${var:=defaultvalue}
var
完全没有设置

$var - 在两种情况下都会返回defaultvalue

$ unset var
$ echo ${var:-defaultvalue}
defaultvalue

$ unset var
$ echo ${var:=defaultvalue}
defaultvalue

2 个答案:

答案 0 :(得分:8)

无法使用:=方式分配

位置或特殊参数。见这个例子:

args() { v=${1:=one}; echo "$v";
args
-bash: $1: cannot assign in this way

And this:

args() { v=${1:-one}; echo "$v"; }
args
one

根据man bash :( 强调是我的突出差异)

  

${parameter:-word}
     使用默认值。如果参数未设置或为null,则替换单词的扩展。否则,参数的值将被替换。

     

${parameter:=word}
              分配默认值。如果参数未设置或为null,则单词的扩展分配给参数。该                 然后替换参数的值。 可能无法将位置参数和特殊参数分配给                 这样

答案 1 :(得分:7)

它们之间的相似之处仅在于${var:=defaultvalue}为var赋值,而不仅仅是像它一样展开。

示例:

> A=''
> echo "${A:=2}"
2
> echo "$A"
2
> A=''
> echo "${A:-2}"
2
> echo "$A"
(empty)
相关问题