Bash 5.0 发布新功能

邮件列表 最近确认了 Bash-5.0 的发布。 而且,很高兴知道它带有新功能和变量。

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

第五个版本侧重于新的 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 变量解析方式的更改意味着 nameref 的某些用途会有所不同,尽管我已尝试将兼容性问题降至最低。 默认情况下,如果启用了扩展调试模式,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? 如果是这样,这次更新会改变你的想法吗?

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