【问题标题】:Is it safe to use Bash 4 features in new scripts?在新脚本中使用 Bash 4 功能是否安全?
【发布时间】:2015-08-22 21:13:28
【问题描述】:

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

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

【问题讨论】:

  • 我想这取决于您所针对的操作系统 - 如果您使用 bash4,则排除所有 Apple OS X 设备,因为 Apple 还没有超越 bash 3.2
  • 除了it取决于....这句话之外,我真的不知道如何回答这个问题

标签: bash portability


【解决方案1】:

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

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,因此如果您想选择使用 Bash 特定功能,则需要明确使用 #!/bin/bash

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

【讨论】:

  • 我还建议将 Python 2.x 或 Perl 作为一种跨 *nix 系统的通用语——OS X 和我能想到的每个 Linux 发行版都涵盖了你。无论如何,对于真正的可移植性,Python 似乎比 Bash 更好,因为 Bash 脚本需要主机系统中的更多外部命令,所以如果你想要真正可移植,你会被 POSIX 困住,这确实是有限制的。 (当然,有时 Bash 仍然是完成这项工作的更好工具。)
  • @IvanX Python 不包含在 Arch Linux base packages 中,如果您安装它,/usr/bin/python 是 Python 3,而不是 Python 2(您需要将其称为 @987654327 @ 明确)。它看起来像neither Python or Perl are included in base OpenBSD。像 OpenWRT 这样的嵌入式 Linux 通常不包含在它们的基本发行版中。如果您想要真正的可移植性,POSIX sh 是您的最佳选择。如果没有,请使用您喜欢的任何一个,因为几乎所有平台上的软件包 repos 中都提供了所有这些。
  • 谢谢 Brian,不知道 Arch 和 Python。但是,如果您的目标不是嵌入式 linux,则可以使用 Perl。在使用 POSIX sh 时,我总是感到很手足无措,但可以肯定的是,你的观点是成立的。
猜你喜欢
  • 2011-10-09
  • 1970-01-01
  • 2020-06-27
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
相关资源
最近更新 更多