有什么区别: - 和:=在Bash参数替换中?

Cas*_*ash 7 bash colon-equals

有什么区别: - 和:=在Bash参数替换中?

他们似乎都设置了默认值?

Pes*_*The 11

引用Bash参考手册:

${parameter:-word}

如果parameter未设置或为null,word则替换扩展 .否则,值parameter被替换.

${parameter:=word}

如果parameter未设置或为null,word则分配扩展名 parameter.parameter然后替换值.不能以这种方式分配位置参数和特殊参数.

不同之处在于:=它不仅取代了word它,而且还将它分配parameter:

var=
echo "$var"               # prints nothing
echo "${var:-foo}"        # prints "foo"
echo "$var"               # $var is still empty, prints nothing
echo "${var:=foo}"        # prints "foo", assigns "foo" to $var
echo "$var"               # prints "foo"
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅这个伟大的wiki.bash-hackers.org教程.