相当于shell脚本中的参数扩展

时间:2015-09-11 13:03:45

标签: bash

我理解参数扩展

a = ${b:-c}

将分配' b'的内容如果' b'已设置,其他内容为' c'

无论如何,我可以直接a="123":-"456"而不是存储' 123'变量和''''另一个变量。

1 个答案:

答案 0 :(得分:4)

  

我理解参数扩展

a = ${b:-c}
  

将'b'的内容分配给if'b'设置,否则'c'的内容

不完全是。首先,不允许=符号周围的空格。在第二位,如果参数${b:-c}设置为非空,则${b}会扩展为与b相同的内容。在第三位,如果参数b为空或未设置,则${b:-c}会扩展为文字文本c,而不是参数$c的内容。

  

无论如何我可以直接做一个=“123”: - “456”,而不是将'123'存储到变量,将'456'存储到另一个变量。

:-部分是参数扩展语法的一个方面。它不是运算符,因此您可以在其他上下文中使用它。

此外,你提出的建议没有意义。如果你有一个文字字符串,那么你知道它是否为null,所以你不需要这样的结构。但是,您提供的表达式中的c是“字”而不是变量名,因此您可以执行

a=${b:-456}

如果将a设置为非空值,则将参数b设置为与参数b相同的值,否则设置为字符串456

你也可以做更多复杂的事情,因为替代的替代文本 - 在这种情况下是'456' - 是一个可以扩展的“单词”。特别是,如果您确实希望替代值是参数c的扩展,那么您可以这样做:

a=${b:-${c}}