每当我编写 shell 脚本(主要是软件开发实用程序或构建工具)时,我通常会尽量避免使用 bash,而是使用普通的旧 sh 来实现可移植性。但是最近我遇到了越来越多的问题,其中有用的功能不可用,或者使用 sh 的系统之间的行为实际上不太一致,而不是使用 bash,因为 sh 被别名为不同的外壳......
据我了解,sh 是最古老的 Unix shell,精心编写的 sh 脚本理论上应该可以在几乎所有系统上运行......但似乎每个主要 shell 也有大约 9000 种不同的变体。使用 bash 作为脚本解释器不会有效地限制脚本的可移植性吗?当然,在 OS X 或几乎任何 Linux 上都没有问题,但是 BSD 呢?Solaris、AIX、HP-UX?如果你真的想在所有东西上运行,你会怎么做?
我知道 bash 几乎可以安装在任何操作系统上,但它真的是所有相关现代系统的一等公民吗?它是预装的吗?我只是不确定是否最好避免或接受 bash 以获得最一致和便携的整体体验。