如何使 shell 脚本尽可能可移植(POSIX 和非 POSIX)

如何使 shell 脚本尽可能可移植(POSIX 和非 POSIX)

情况:编写 shell 脚本来跨多个 shell 执行某些操作

问题:虽然 Bourne 兼容的 shell 脚本(bashkshashzsh等)很容易移植(只需确保脚本兼容sh并且它应该在其他 Bourne 兼容的 shell 上运行),但与那些不兼容 POSIX,例如cshfish。由于语法错误(预期),在这些 shell 上运行时脚本将立即失败。

问题:有没有办法编写一个脚本,使其可以在所有 shell 中执行,而不管各个 shell 的 POSIX 兼容性如何?我想不出一种方法可以在不触发语法错误并导致脚本自行退出的情况下执行此操作。

答案1

简单:写仅有的为了/bin/sh。那个是保证(根据 POSIX,也根据传统)存在。其他 shell 可能表面上相似,也可能截然不同。检查例如皮尔,一个在(薄)引擎盖下的 Perl shell,或者方案外壳,具有非常多的 LISPish 语法。

Unix 的优点之一是 shell 是一个标准的用户级程序。但这意味着每个黑客都可以编写自己的疯狂变体。试图在所有 shell 之间编写一些模糊的交集是注定要失败的。为所有“常用 shell”编写意味着以某种方式定义“常用”的含义......这肯定会激怒某人。

相关内容