避免 shell 脚本中的“BASH 主义”

amp*_*ine 37 shell bash zsh ash

是否存在类似于Perl::Critic的工具来检查您的 shell 脚本并指出缺陷、可移植性问题、使用非标准程序而没有回退、折旧的程序使用等?

我意识到这set -o posix将禁用非 POSIX 使用,但这不会告诉我我想知道的事情,例如 zsh 索引 shell 数组从 1 开始,bash 从 0 开始,而 ash 根本不支持数组。

Gil*_*il' 36

checkbashisms。在 Debian 上,它作为软件包维护者工具的一部分提供

dashposh下测试你的脚本。两者都有一些非 POSIX 结构,但是如果您的脚本在这两种情况下都可以使用,那么它很可能在大多数地方都可以使用。(需要注意的是,很难测试典型的 shell 脚本,因为它们往往有很多极端情况。)

如果您打算将脚本移植到嵌入式 Linux 平台,请使用BusyBox测试它们。请注意,BusyBox 可以或多或少受到限制,这取决于您想要的嵌入式系统有多小;拥有依赖于某些 BusyBox 安装所没有的功能的脚本是很正常的。

请注意,不可移植性不仅仅来自外壳,它还来自外部实用程序。OpenBSD 和 Solaris 往往具有具有 POSIX 功能的实用程序,仅此而已,因此它们非常适合测试可移植性。

您需要参考POSIX 规范本线程中提到的其他资源(尤其是autoconf 手册);但那是文档,如果您不小心使用了某个功能,它也无济于事。