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

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

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

这是一些相关文档:

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

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

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

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

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

答案1

考虑这个例子:

#!/bin/bash

echo "${parameter:-a}"
echo "${parameter:-b}"
echo "${parameter:=c}"
echo "${parameter:=d}"

以及脚本的运行示例:

$ bash ex.sh
a
b
c
c

第一个echo,parameter未设置,所以a也是取代的。这打印a.

在第二个中echo,parameter仍未设置,所以b也是取代的。这打印b.

在第三个中echo,parameter仍未设置,所以parameter也是分配的c,然后parameter进行评估。这打印c.

第四声回音中,parameter c(它在上一个语句中设置为),因此它的值被打印。这c再次打印。

由此可以看出,如果未设置或为空,则${parameter:-word}计算结果为null,但不影响wordparameter价值parameter, while${parameter:=word}将设置价值如果parameter它被取消设置为空。

相关内容