`$ {var:-value}`和`$ {var:= value}`有什么区别?

时间:2018-03-04 12:50:40

标签: shell

我不明白${var:-value}${var:=value}之间的区别 似乎shell中的两个命令都工作相同。

有什么区别?

2 个答案:

答案 0 :(得分:1)

如果var未设置或为空:

  • ${var:-value}将扩展为“值”
  • ${var:=value}将扩展为“值”并设置var = value

演示

$ var=

$ echo "${var:-y}"; echo ">$var<"
y
><

$ echo "${var:=y}"; echo ">$var<"
y
>y<

Doc:https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion

答案 1 :(得分:1)

如果变量未设置或为空(空值),则两者都执行某事

如果您恰好将表达式分配给某个东西,或者在here-document中使用它,那么两者都可能出现做同样的事情,因为unset / null var$value替换。

但区别在于后者$value分配给var,以便可以在后续的shell表达式中使用。

这常用于这个成语:

: ${var:=value}

指定不存在的默认值。