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 中删除)。我不确定这个开关是什么时候完成的,但那是很多年前的事了。
Solaris 10 及更早版本/bin/sh
不支持$()
.
它今天仍在使用,因为 Solaris 10 仍在使用中,Sun 不想将它替换为符合标准的版本(直到并包括 Solaris 10)——并且因为大多数人认为/bin/sh
它是默认 shell 并且不知道如何使用符合 POSIX 的 shell 可移植地执行脚本。
Sun 不改变的动机/bin/sh
是为了避免破坏依赖于不符合行为的现有 shell 脚本。