在 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 维护着一个包含大量信息的页面。