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



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

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

引用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"

有关详细信息,请参阅此出色的 wiki.bash-hackers.org 教程。

从 https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html :

${parameter:-word}
If parameter is unset or null, the expansion of word is substituted. Otherwise, the value of parameter is substituted.
${parameter:=word}
If parameter is unset or null, the expansion of word is assigned to parameter. The value of parameter is then substituted. Positional parameters and special parameters may not be assigned to in this way.

在 :- 中不修改参数值,只是"打印"单词的扩展。在 := 中,参数获取新值,该值是单词的扩展,并且它还"打印"单词的扩展。
有时,在脚本中,您希望为变量分配默认值(如果未设置(。许多人使用VAR=${VAR:-1},如果未设置 VAR,它将为 VAR 分配 '1'。这也可以写成: ${VAR:=1},如果没有设置VAR,它将为VAR分配'1'并运行: $VAR: 1,但:是一个特殊的内置bash,将丢弃所有参数并且什么都不做。

$ var=
$ echo $(( ${var:-1} + 3 ))  # local substitution if value is null
4
$ echo $(( ${var} + 3 ))
3
# set it to null 
$ var= 
$ echo $(( ${var:=1} + 3 )) # global substitution if value is null
4
$ echo $(( ${var} + 3 ))
4 

https://www.tldp.org/LDP/abs/html/parameter-substitution.html

最新更新