POSIX sh 支持哪些类型的字符串插值?

POSIX sh 支持哪些类型的字符串插值?

在 POSIX sh 中允许"${blah}",还是需要 bash 派生的 shell?

答案1

"${blah}""$blah"是可移植的 shell 语法:它们适用于所有 POSIX 兼容的 shell 以及传统的 Bourne shell。 POSIX 还需要变量扩展的其他功能:

  • ${VAR#PREFIX}使用、${VAR##PREFIX}${VAR%SUFFIX}和进行字符串操作${VAR%%SUFFIX}
  • 使用、 和 条件处理未设置的变量,以及使用${VAR-DEFAULT}、和的未设置或空变体。${VAR=DEFAULT}${VAR+FALLBACK}${VAR?MESSAGE}:-:=:+:?
  • 可变长度${#VAR}

在所有情况下,请记住,除非使用双引号(或其他一些不允许多个单词的上下文),否则结果会$…经历空格分割(更准确地说,在字符处分割)和通配符扩展(通配符扩展)。$IFS

您可以通过阅读规范来查找 POSIX 中存在的内容。现代版本的 POSIX 与开放组基本规格(无可选组件)。旧版本是以下的子集单一 Unix v2

如今,没有 POSIX shell 的类 Unix 系统极为罕见。/bin/sh在一些系统上,特别是 Solaris,它是一个非 POSIX Bourne shell,但 POSIX shell 是可用的(/usr/xpg4/bin/sh在 Solaris 上,您应该在 PATH 中/usr/xpg4/bin提前)。/usr/bin如果您需要与 Bourne shell 兼容,请检查您感兴趣的系统上的手册页,因为 sh 有许多版本,其功能集略有不同。Sven Mascheck 维护着一个包含大量信息的页面

答案2

在 POSIX 规范中的部分参数扩展说...

参数扩展的格式如下:

${表达式}

其中表达式由匹配“}”之前的所有字符组成。

剪断

参数扩展的最简单形式是:

${参数}

然后在关于双引号...

用双引号 ( "" ) 括起来的字符应保留双引号内所有字符的字面值,但字符反引号、 和 除外,如下所示:

$ 的美元符号应保留其引入参数扩展(请参阅参数扩展)、命令替换形式(请参阅命令替换)和算术扩展(请参阅算术扩展)的特殊含义。

所以,是的。

相关内容