【问题标题】: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 的值,如果 它为空变量未设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 2016-02-24
      • 2011-08-08
      • 1970-01-01
      • 2016-08-20
      相关资源
      最近更新 更多