Bash 5.0 发布及其新功能
创始人
2024-03-02 01:47:28
0

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

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

第五个版本侧重于新的 shell 变量和许多重大漏洞修复。它还引入了一些新功能,以及一些与 bash-4.4 不兼容的更改。

Bash logo

新功能怎么样?

在邮件列表解释了此版本中修复的 bug:

此版本修复了 bash-4.4 中的几个主要错误,并引入了几个新功能。最重要的 bug 修复是对 nameref 变量的解析以及通过模糊测试发现的许多潜在的内存越界错误。在为了符合 Posix 标准解释而不进行单词拆分的上下文中,对 $@$* 的展开做了许多改变,另外还有解决极端情况中 Posix 一致性的修改。

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

BASH_ARGV0EPOCHSECONDSEPOCHREALTIME。内置命令 history 可以删除指定范围的条目,并能将负数理解为从历史末端开始的偏移量。有一个选项允许局部变量继承前一个范围内具有相同名称的变量的值。有一个新的 shell 选项,在启用它时,会导致 shell 只尝试一次扩展关联数组下标(这在算术表达式中使用时会出现问题)。globasciiranges 这个 shell 选项现在默认启用。可以在配置时默认关闭它。

Bash-4.4 和 Bash-5.0 之间有哪些变化?

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

bash-4.4 和 bash-5.0 之间存在一些不兼容的变化。尽管我已经尽量最小化兼容性问题,但是对 nameref 变量解析的更改意味着对变量名引用的某些使用会有不同的行为。默认情况下,如果启用了扩展调试模式,shell 仅在启动时设置 BASH_ARGCBASH_ARGV。它被无条件地设置是一个疏忽,并且在脚本传递大量参数时会导致性能问题。

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

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

  • 有一个新的(默认情况下禁用,文档中没有说明)shell 选项,用于在运行时启用/禁用向 syslog 发送历史记录。
  • 正如文档一直所说的那样,除非 shell 处于调试模式,否则它不会在启动时自动设置 BASH_ARGCBASH_ARGV,但如果脚本在上层引用它们且没有启用调试模式,那么 shell 将动态创建它们。
  • 现在可以使用 -d start-end 删除指定范围的 history 条目。
  • 如果启用了作业控制的非交互式 shell 检测到前台作业因 SIGINT 而死亡,则其行为就像接收到 SIGINT 一样。
  • BASH_ARGV0:一个新变量,扩展为 $0,并在赋值时设置为 $0

要查看完整的更改和功能列表,请参阅邮件列表文章

总结

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

bash --version

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

你怎么看待 Bash-5.0 发布?你在使用其他 bash 的替代品么?如果有的话,这个更新会改变你的想法么?

请在下面的评论中告诉我们你的想法。


via: https://itsfoss.com/bash-5-release

作者:Ankush Das 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

在Linux服务器上绑定域...
要把Linux服务器和域名绑定起来,让我们先简单聊聊这个过程。想象...
2025-02-27 13:49:16
捕捉添加组成员到本地组的P...
要捕捉添加组成员到本地组的PowerShell脚本的异常,可以使用...
2025-01-12 17:02:04
捕捉shell脚本中的“p...
当在shell脚本中运行psql命令时,如果出现“psql: co...
2025-01-12 17:02:01
不知道如何在PowerSh...
在PowerShell中,可以使用-join操作符将数组转换为字符...
2025-01-12 08:00:13
不知道该如何处理这个bas...
要解决这个问题,可以尝试以下几个步骤:仔细检查代码:阅读代码并确保...
2025-01-12 01:32:07
不在bash中设置CLAS...
在Bash中,可以通过以下几种方法来解决不设置CLASSPATH的...
2025-01-11 14:30:49

热门资讯

使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
Bazzite:专为 Stea... 为 Linux 桌面或者 Steam Deck 做好游戏准备,听起来都很刺激!对于一个专为 Linu...
Motrix:一个漂亮的跨平台... 一个开源的下载管理器,提供了一个简洁的用户界面,同时提供了跨平台操作的所有基本功能。在这里了解关于它...
Bash 脚本中如何使用 he... here 文档 here document (LCTT 译注:here 文档又称作 heredoc ...
使用 dialog 和 jq ... 为何选择文字用户界面(TUI)?许多人每日都在使用终端,因此, 文字用户界面 Text User I...