【问题标题】:How "${var-Apple}", "${var+Apple}", "${var=Apple}" work?“${var-Apple}”、“${var+Apple}”、“${var=Apple}”如何工作?
【发布时间】:2021-07-24 04:54:48
【问题描述】:
假设 var=Banana 和 Apple 是一个字符序列。我知道这些命令的输出,但我不明白它们为什么会这样工作。
echo ${var-Apple} 的输出是 Banana,${var+Apple} 的输出是 Apple,${var=Apple} 的输出是 Banana,但为什么呢?
另外,当我有命令 echo ${var-Apple} | ${VAR-Pear} 并且 VAR 不存在时,它会打印 Banana |梨?如果我们用 = 而不是 - 它也会打印 Pear,如果我们用 + 它将什么也不打印。
【问题讨论】:
标签:
linux
bash
shell
variables
operating-system
【解决方案1】:
这些构造在man bash 中的参数扩展中进行了描述。
${参数:-word}
使用默认值。如果参数未设置或为空,则替换单词的扩展。否则,参数的值被替换。
${参数:=字}
分配默认值。如果参数未设置或为空,则将单词的扩展分配给参数。然后替换参数的值。位置参数和特殊参数不能这样赋值。
${参数:+word}
使用替代值。如果参数为null或未设置,则不替换任何内容,否则替换单词的扩展。
因为它们使用冒号变体,所以很难直接找到它们,但有一个解释:
[...] bash 测试未设置或为空的参数。省略冒号会导致仅对未设置的参数进行测试。
请注意,echo "${VAR=Pear}" 会更改 $VAR 的值,如果 它为空变量未设置。