![Bash 参数扩展“替换”与“分配”](https://linux22.com/image/192699/Bash%20%E5%8F%82%E6%95%B0%E6%89%A9%E5%B1%95%E2%80%9C%E6%9B%BF%E6%8D%A2%E2%80%9D%E4%B8%8E%E2%80%9C%E5%88%86%E9%85%8D%E2%80%9D.png)
我正在研究使用${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,但不影响word
parameter
价值的parameter
, while${parameter:=word}
将设置价值如果parameter
它被取消设置为空。