哪些 shell 不支持美元括号扩展和需求反引号?

joe*_*dle 8 shell command-substitution portability

现代建议是使用:

$(...)
Run Code Online (Sandbox Code Playgroud)

而不是旧的:

`...`
Run Code Online (Sandbox Code Playgroud)

主要是为了可读性和避免嵌套时需要转义。

哪些 shell 不支持该$(...)表单,它们中的任何一个今天仍在使用吗?

小智 8

原始的 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 中删除)。我不确定这个开关是什么时候完成的,但那是很多年前的事了。


max*_*zig 5

Solaris 10 及更早版本/bin/sh不支持$().

它今天仍在使用,因为 Solaris 10 仍在使用中,Sun 不想将它替换为符合标准的版本(直到并包括 Solaris 10)——并且因为大多数人认为/bin/sh它是默认 shell 并且不知道如何使用符合 POSIX 的 shell 可移植地执行脚本

Sun 不改变的动机/bin/sh是为了避免破坏依赖于不符合行为的现有 shell 脚本。

  • @cuonglm,是的,我刚刚测试过,我可以确认。本来以为 Hurd 会被释放,而不是 Sun/Oracle 改变其对 `/bin/sh` 的政策...... (2认同)