似乎两者完全相同。
在这两种情况下,空$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
答案 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)