Bash 参数扩展“替换”与“分配”

Pie*_*tru 3 bash

我正在研究使用${parameter:-word}vs 的参数扩展${parameter:=word}

这是一些相关文档

${parameter:-word}如果参数未设置或为空,则替换单词的扩展。

${parameter:=word}如果参数未设置或为空,则将单词的扩展分配给参数。然后替换参数的值。

当然,关键的区别在于每个描述的第一句,替换与分配。

但实际上,我不知道当某事是时substituted与当某事是时会发生什么assigned

最后,什么时候使用其中一种比较合适?

And*_*ton 7

考虑这个例子:

#!/bin/bash

echo "${parameter:-a}"
echo "${parameter:-b}"
echo "${parameter:=c}"
echo "${parameter:=d}"
Run Code Online (Sandbox Code Playgroud)

以及脚本的运行示例:

$ bash ex.sh
a
b
c
c
Run Code Online (Sandbox Code Playgroud)

在第一个 中echoparameter未设置,因此a替换。这打印a.

在第二个中echoparameter仍未设置,因此b替换。这打印b.

在第三个 中echoparameter仍然未设置,因此parameter分配了c,然后parameter进行求值。这打印c.

在第四个 echo 中,设置了parameter 在上一个语句中设置为),因此打印其值。这再次打印。cc

由此可以看出,如果未设置或为 null,${parameter:-word}则计算结果为,但不会影响的,而如果未设置为 null,则会设置的值。wordparameterparameter${parameter:=word}parameter