清单:何时编写可移植/POSIX 兼容的 shell 代码?

Checklist: When to write portable / POSIX-compliant shell code?

许多 shell 开发人员花费大量精力开发可移植代码,例如避免 Bash 主义,我想知道这种增加的努力对满足软件要求的真正贡献有多大。

我想知道是否可以给出一个需要可移植代码的条件的简单清单。让我们假设

到目前为止我想到的是:

是否有任何我没有想到的明显条件,或者可以更笼统地表达它们? POSIX 合规性是否需要与一般可移植性不同的清单?有什么文献或其他资源可以推荐吗?

I wonder how much this increased effort really contributes to compliance with software requirements.

这 - "this increased effort" - 表明选择 shell 作为编程语言首先是错误的。 Shell 是管道语言:您不在其中实现工具 - 您用它控制其他工具。如果一个shell脚本需要很长时间开发,如果你运行进入POSIX的限制shell,那么shell很可能是错误的语言。

唯一的例外,也是您的清单中缺少的东西,是一个裸露的环境,就像新安装的一样,商业 UNIX 系统(可能还有一些 *BSD 系统)。如果您为此类系统开发软件,那么您可能必须使用 POSIX shell,因为可能实际上没有安装其他任何东西(如字面上的 "literally nothing")系统.

最后,所有软件都附带依赖项和先决条件列表。如果您将 bash 作为依赖项包含在内,那么 *NIX 管理员就不会打扰了:无论如何,bash 通常是安装在此类系统上的第一个 3rd 方包。此外,与其他第 3 方软件相比,bash(与其他流行的 shell 一样,例如 cshtcshksh)实际上没有安装和依赖问题。

Would POSIX compliance require a different checklist than general portability?

没有"general portability"这样的东西。便携性总是特别

广义上的软件可移植性是指软件在两个或多个不同操作系统上 运行 的能力。 POSIX 是一个操作系统标准,为用户和软件开发者定义了一部分 OS 接口。它是一个平台基础,而不是一个平台。

POSIX 合规要求我只在一些利基市场看到过。通常仅仅是因为它是唯一存在的操作系统 ISO 标准。

对于没有"POSIX compliance"硬性要求的软件,一般建议针对特定平台。共同点可能仍然是 POSIX 标准,但 OS 特定功能、自定义和处理只是让软件更适合特定平台的用户。

说到底,用户不关心POSIX。 POSIX 是开发人员的工具。开发人员使用它来降低开发和维护多平台软件的成本。因此,来自用户的需求是特定平台的支持,而不是 "POSIX compliance".