【问题标题】:${var:=default} vs ${var:-default} - what is difference? [duplicate]${var:=default} vs ${var:-default} - 有什么区别? [复制]
【发布时间】:2021-06-30 06:25:36
【问题描述】:

似乎两者的动作完全相同。

空的$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

【问题讨论】:

  • @gniourf_gniourf 这不是必需的。常见问题解答上的赞成票数可以说明这一点。拥有权力的人缺乏即时关闭的意愿进一步证实了这一点。

标签: bash variables


【解决方案1】:

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

例子:

> A=''
> echo "${A:=2}"
2
> echo "$A"
2
> A=''
> echo "${A:-2}"
2
> echo "$A"
(empty)

【讨论】:

    【解决方案2】:

    位置或特殊参数不能使用:=方式赋值。看这个例子:

    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}
    使用默认值。如果参数未设置或为空,则替换单词的扩展。否则,参数的值被替换。

    ${parameter:=word}
    分配默认值。如果参数未设置或为空,则词的扩展分配给参数。这 然后替换参数的值。 位置参数和特殊参数不能赋值给 这边

    【讨论】:

    • 那么如何分配它们,对于同样的用例?不同的语法?
    • 显然,使用第一种语法,即DOT='.'${4:-$DOT}
    猜你喜欢
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多