是什么让 shell “符合 POSIX 标准”?

Ing*_*nix 5 shell command-line

我对 Windows 上的 Shell 工作方式感到非常厌倦 - 而且没有那么多选择。所以我考虑过写自己的shell。然而,在阅读有关 autotools 生成的脚本的一些文档时,我注意到有时会使用“SH 兼​​容”或“POSIX 类兼容 shell”。

据我所知,Bash 脚本与 Fish 不兼容,因为&&它被文字替换and- 这只是我一眼就能发现的区别。

那么,一个 shell 需要“SH 兼​​容”或“类 POSIX 兼容 shell”吗?除了读取要执行的命令和存储一些变量之外,shell 实际上并没有做很多事情,所以我认为这只是语法上的。或者,我错了吗?

Kam*_*Cuk 6

那么,一个 shell 需要“SH 兼​​容”或“类 POSIX 兼容 shell”吗?

它需要遵循POSIX 标准指定的行为。POSIX 是一个开放标准 - 您可以在https://pubs.opengroup.org/onlinepubs/9699919799/在线阅读。请参阅Shell 和实用程序 2. Shell 命令语言部分,了解与 shell 行为相关的文档。

没有(至少我不知道)认证公司会将特定的 shell 程序认证为“POSIX 兼容”。整个操作系统都获得了POSIX 认证,然后这些操作系统附带了 POSIX 兼容的 shell。如果项目没有足够的资金让外部公司进行认证,通常由作者自己决定是否希望他的创作兼容 POSIX,如果他这样做,那么用户期望 shell 按照 POSIX 指定的方式运行。

例如,Bash 脚本与 Fish 不兼容

来自bash 手册

它旨在成为 IEEE POSIX 规范(IEEE 标准 1003.1)的 IEEE POSIX Shell 和工具部分的一致实现。

来自鱼主页

与其他 shell 不同,fish 不遵循 POSIX 标准,但仍然使用大致相同的模型。