以下之间的区别是: - 和:=在Bash参数替换中?

时间:2018-01-12 02:35:38

标签: bash colon-equals

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

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

3 个答案:

答案 0 :(得分:10)

引用Bash Reference Manual

  

${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 tutorial

答案 1 :(得分:1)

$ 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

答案 2 :(得分:1)

来自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并将{1}}或: $VAR设置为VAR,则会将“1”分配给VAR,但: 1是内置的特殊内容bash并将丢弃所有论点并且什么都不做。