我不明白${var:-value}
和${var:=value}
之间的区别
似乎shell中的两个命令都工作相同。
有什么区别?
答案 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}
指定不存在的默认值。