带有新功能的 Bash 5.0 发布

邮件列表 最近确认了 Bash-5.0 的发布。 而且,令人兴奋的是,它带有新功能和变量。

好吧,如果您一直在使用 Bash 4.4.XX,那么您一定会喜欢 Bash 的第五个主要版本。 重击.

第五版侧重于新的 shell 变量和许多重大错误修复,并进行了大修。 它还引入了一些新功能以及一些不兼容的更改 bash-4.4 和 bash-5.0。

新功能怎么样?

邮件列表解释了这个新版本中修复的错误:

此版本修复了几个突出的错误 bash-4.4 并引入了几个新功能。 最重要的错误修复是对 nameref 变量如何解析的彻底检查以及通​​过模糊测试发现的一些潜在的越界内存错误。 扩容有很多变化 [email protected] 和 $* 在不执行分词以符合 Posix 标准解释的各种上下文中,以及为解决 Posix 一致性的极端情况而进行的其他更改。

它还引入了一些新功能。 根据发行说明,这些是最值得注意的新功能是几个新的 shell 变量:

BASH_ARGV0、EPOCHSECONDS 和 EPOCHREALTIME。 ‘history’ 内置可以删除历史条目的范围,并将否定参数理解为从历史列表末尾的偏移量。 有一个选项允许局部变量继承前一个范围内同名变量的值。 有一个新的 shell 选项,当启用时,会导致 shell 尝试仅扩展关联数组下标一次(这是在算术表达式中使用它们时的问题)。 ‘globasciiranges’ shell 选项现在默认启用; 它可以在配置时默认设置为关闭。

Bash-4.4 和 Bash-5.0 之间的变化是什么?

更新日志提到了不兼容的更改和支持的 readline 版本历史记录。 它是这样说的:

之间有一些不兼容的变化 bash-4.4 和 bash-5.0。 解析 nameref 变量的方式的变化意味着 namerefs 的某些使用将表现不同,尽管我试图最小化兼容性问题。 默认情况下,如果启用扩展调试模式,shell 只会在启动时设置 BASH_ARGC 和 BASH_ARGV; 当脚本被传递大量参数时,它被无条件设置并导致性能问题,这是一个疏忽。

如果需要,可以将 Bash 链接到已安装的 Readline 库而不是 lib/readline 中的私有版本。 只有 readline-8.0 和更高版本能够提供所有的符号 bash-5.0 要求; 早期版本的 Readline 库将无法正常工作。

我相信添加的一些功能/变量非常有用。 我最喜欢的一些是:

  • 有一个新的(默认禁用,未记录)shell 选项来启用和禁用在运行时向 syslog 发送历史记录。
  • shell 不会在启动时自动设置 BASH_ARGC 和 BASH_ARGV,除非它处于调试模式,正如文档一直所说的那样,但如果脚本在顶层引用它们而没有启用调试模式,则会动态创建它们。
  • “历史”现在可以使用“-d start-end”删除历史条目范围。
  • 如果启用了作业控制的非交互式 shell 检测到前台作业因 SIGINT 而死,它会像收到 SIGINT 一样行事。
  • BASH_ARGV0:扩展为 $0 并在赋值时设置 $0 的新变量。

要查看更改和功能的完整列表,您应该参考 邮件列表帖子.

包起来

您可以使用以下命令检查当前的 Bash 版本:

bash --version

您更有可能安装了 Bash 4.4。 如果您想获得新版本,我建议您等待发行版提供它。

有了 Bash-5.0,你怎么看? 您是否使用任何替代方法 bash? 如果是这样,这个更新会改变你的想法吗?

在下面的评论中让我们知道您的想法。