4

我想知道使用 Bash 内置命令的 Bash 脚本的可移植性。

我知道每种 UNIX 风格都倾向于修改各种 UNIX 实用程序。但他们是否倾向于单独留下 Bash 和 Bash 内置程序?尤其是 MacOS 呢?

4

3 回答 3

4

据我所知,bash 在 Mac OS X 上是未经修改的(除了使其编译所需的细微调整;您可以在http://opensource.apple.com/上查看源代码),并且脚本应该非常便携。

正如 Graham Lee 和 Gordon Davisson 所指出的,Mac OS X 附带旧版本,支持的版本之间存在差异。Bash 4 具有关联数组和其他更改。Bash 3 包括正则表达式匹配(可能还有其他我没有搜索过的)。不记得 Bash 2 的差异,也许是一些括号/条件测试差异?

Mac OS X 10.7.x Lion 包括 Bash 3.2.x。我不记得我脑海中的确切版本,但 Mac OS X 10.6.x Snow Leopard 和 10.5.x Leopard 包括 Bash 3.x。Mac OS X 10.4.x Tiger 和更早的版本使用 Bash 2.0.5。因此,您肯定会遇到默认支持的内容之间的差异。

当然,除了 Mac OS X 上不同bash版本的功能集和内置程序之间的差异之外,您还会发现其他工具的差异。例如,Mac OS X 上存在getopt问题(在 Mac OS X 目录/文件路径中经常出现的空格,在参数中不受支持;getopts较新bash版本中的内置可以帮助解决此问题,但在旧版本)。当然,也会有其他工具具有不同的功能或语法。

我绝对不是专业的bash开发人员,但我编写了许多支持各种版本的 Mac OS X 特定脚本。有关2.x 与 3.x 正则表达式功能和解决方法的讨论,请参阅我的 Bash 和替代品中的正则表达式一文。或者,我的一些bash脚本已经考虑到了 Mac OS X:tools-osx & bash_stub

于 2012-05-02T19:58:21.803 回答
3

Apple 使用相当旧的 Bash 版本,因为他们不发布根据 GPL3 许可的代码。您可以从 Apple 的开源站点下载当前版本,并看到它至少声称是 vanilla Bash 3.2(尽管显然已经添加了 Xcode 项目)。

于 2012-05-02T17:25:09.840 回答
0

bash 版本 4 未在 Darwin 或 MacOS Lion 上发布。所以mac不支持对read命令等的改进,这是不幸的。

cygwin 有 bash 4.1.10

于 2014-07-08T14:01:35.573 回答