Bash 4 提供了一些不错的特性,比如 globstar、关联数组、内置的 mapfile 等。
如果我使用这些功能,是否会大大降低我的脚本的可移植性?坚持使用 Bash 3 是否更安全?
取决于你想要多便携。
Apple 不会在 Mac OS X 上发布 Bash 4,因为 Bash 4 使用 GPLv3。当然,用户可以根据需要自行安装,但大多数用户不会安装。
如果您想移植到 OS X,您可能不应该依赖 Bash 4 的功能。但是,如果您不介意只是移植到现代 GNU/Linux 发行版,那么几乎所有发行版都包含 Bash 4,因此您不妨依赖它们。
另外,请记住,并非所有操作系统都默认提供 bash。例如,OpenBSD 默认提供 pdksh,您需要显式安装 Bash。Debian 提供 bash,但它/bin/sh是 Dash,因此#!/bin/bash如果您想选择加入 Bash 特定功能,则需要明确使用。
如果你真的想要可移植性,你应该坚持使用 POSIX/Single-Unix-Specification 特性。但是,如果您只需要在最新的 GNU/Linux 发行版(甚至是几年前的发行版)上运行,那么使用/bin/bash并假设它是 Bash 4 应该没问题。