在新脚本中使用 Bash 4 个功能是否安全?

Is it safe to use Bash 4 features in new scripts?

Bash 4 提供了一些不错的功能,例如 globstar、关联数组、内置的 mapfile 等。

如果我使用这些功能,是否会大大降低脚本的可移植性?坚持 Bash 3 更安全吗?

取决于您想要的便携程度。

Apple 不会在 Mac OS X 上发布 Bash 4,因为 Bash 4 使用 GPLv3。当然,如果用户愿意,可以自己安装,但大多数用户不会安装。

如果您想移植到 OS X,您可能不应该依赖 Bash 4 个功能。但是,如果您不介意只移植到现代 GNU/Linux 发行版,那么几乎所有发行版都包含 Bash 4,因此您不妨依赖它们。

此外,请记住,并非所有 OS 都默认发货 bash。例如,OpenBSD 默认附带 pdksh,您需要显式安装 Bash。 Debian 发布 bash,但 /bin/sh 是 Dash,因此如果您想选择 Bash 特定功能,则需要明确使用 #!/bin/bash

如果你真的想要便携性,你应该坚持使用 POSIX/Single-Unix-Specification 特性。但是,如果您只需要 运行 在最新的 GNU/Linux 发行版(甚至是几年前的发行版)上,使用 /bin/bash 并假设它是 Bash 4 应该没问题。