0

我遇到了这个表达式 ${varname:-text},以及其他 3 个类似的形式:

${varname-text}

${varname:=text}

${varname:?text}

好像是文本替换,这个表达式怎么用?

4

1 回答 1

0

POSIX shell的标准文档解释了这些特殊的参数扩展格式:

${parameter:-word}

使用默认值。如果参数未设置或为空,则替换单词的扩展;否则,应替换参数的值。

${parameter:=word}

分配默认值。如果参数未设置或为空,则应将单词的扩展分配给参数。在所有情况下,应替换参数的最终值。只能以这种方式分配变量,而不是位置参数或特殊参数。

${parameter:?[word]}

如果为 Null 或 Unset 则指示错误。如果参数未设置或为空,则应将 word 的扩展(或如果省略 word 则指示未设置的消息)写入标准错误,并且 shell 以非零退出状态退出。否则,应替换参数的值。交互式外壳不需要退出。

那里给出了示例和更完整的表格。所有符合 POSIX 的 shell 都必须支持它们。有些,bash,包括其他格式。

于 2012-10-04T06:02:57.993 回答