我正在研究使用${parameter:-word}vs 的参数扩展${parameter:=word}。
${parameter:-word}如果参数未设置或为空,则替换单词的扩展。
${parameter:=word}如果参数未设置或为空,则将单词的扩展分配给参数。然后替换参数的值。
当然,关键的区别在于每个描述的第一句,替换与分配。
但实际上,我不知道当某事是时substituted与当某事是时会发生什么assigned。
最后,什么时候使用其中一种比较合适?
考虑这个例子:
#!/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)
在第一个 中echo,parameter未设置,因此a被替换。这打印a.
在第二个中echo,parameter仍未设置,因此b被替换。这打印b.
在第三个 中echo,parameter仍然未设置,因此parameter被分配了值c,然后parameter进行求值。这打印c.
在第四个 echo 中,设置了parameter ( 在上一个语句中设置为),因此打印其值。这再次打印。cc
由此可以看出,如果未设置或为 null,${parameter:-word}则计算结果为,但不会影响的值,而如果未设置为 null,则会设置的值。wordparameterparameter${parameter:=word}parameter