现代建议是使用:
$(...)
而不是旧的:
`...`
主要是为了可读性并避免嵌套时需要转义。
哪些 shell 不支持该$(...)
表单,其中有哪些至今仍在使用?
答案1
原始的 Bourne shell、csh 或 tcsh 都不支持$()
且不需要``
命令替换。
在许多基于 UNIX 的操作系统上,Bourne shell 不再用作默认 shell (/bin/sh)。然而,这些 shell 仍然由操作系统供应商提供,因为它们由于历史原因仍在使用。
AIX 和 HP-UX 都具有 /bin/sh 作为 POSIX 兼容 shell。 Bourne shell 在 AIX 上仍然可以使用“bsh”(但在1995年对于 AIX 4.1)和 HP-UX 11.11 '/usr/old/bin/sh'(Bourne 已从 11.23 中删除)。我不确定这个转变是什么时候发生的,但那是很多年前的事了。
答案2
Solaris 10 及更早版本/bin/sh
不支持$()
.
它至今仍在使用,因为 Solaris 10 仍在使用,Sun 不想用符合标准的版本(直至并包括 Solaris 10)替换它 - 而且因为大多数人认为它/bin/sh
是默认 shell不知道如何使用符合 POSIX 的 shell 可移植地执行脚本。
Sun 不进行更改的动机/bin/sh
是为了避免破坏依赖于不合格行为的现有 shell 脚本。