Bash 5中的新功能


Answers:


21

在源分发bash中的NEWS文件中可以找到在版本4.4和5.0(版本2019-01-07)之间进行的更改bash

这是它的链接(更改太多,无法在此处列出)。


简短的视图显示了该术语loadable builtins。是否bash遵循通过建立新的ksh93内置标准来查找增强的内置函数,PATH而不是始终给予它们优先权?
schily

@schily bash4.4及更高版本使用BASH_LOADABLES_PATH并从中加载它们enable -f builtin-name
库萨兰达

好吧,这似乎适用于加载命令的时间。那过去的时间呢?enable看起来像ksh93命令的重新实现,builtin但是它缺少将路径与每个内置命令相关联的功能,该命令ksh93通常由预先定义,/usr/ast/bin/<name>并且可以对所有builltins进行精细控制。
schily

@Kusalananda我如何获得新的bash 5.0
Ankur Loriya

@AnkurLoriya您需要等到Unix发行商将其打包发行后,或者从源代码中自行编译。源代码和安装说明可在GNU Bash页面上找到
库萨兰达

14

如果您像我一样,是在寻找标题功能而不是完整的变更日志,那么维护者Chet Ramey的这篇文章将为您解决。这是有趣的部分:

此版本修复了bash-4.4中的几个突出错误,并引入了几个新功能。最重要的错误修复是对nameref变量的解析方式进行了全面检查,并通过模糊检查发现了许多潜在的越界内存错误。在不进行单词拆分以符合Posix标准解释的各种情况下,对$ @和$ *的扩展进行了许多更改,还进行了其他更改来解决Posix符合性的特殊情况。

最值得注意的新功能是几个新的Shell变量:BASH_ARGV0,EPOCHSECONDS和EPOCHREALTIME。内置的“ history”可以删除历史记录条目的范围,并将否定参数理解为相对于历史记录列表末尾的偏移量。有一个选项允许局部变量在先前的作用域继承具有相同名称的变量的值。有一个新的shell选项,启用该选项后,将导致shell仅尝试扩展关联数组下标一次(这在算术表达式中使用它们时会出现问题)。现在默认情况下启用了'globasciiranges'shell选项;可以在配置时将其默认设置为关闭。

在bash-4.4和bash-5.0之间有一些不兼容的更改。对nameref变量解析方式的更改意味着,尽管我已尝试将兼容性问题降到最低,但对nameref的某些使用将表现出不同的行为。默认情况下,如果启用了扩展调试模式,则外壳程序仅在启动时设置BASH_ARGC和BASH_ARGV;疏忽大意是,在脚本传递大量参数时无条件设置它并导致性能问题。

他还引用了这两个文件,以备您需要:

  • 新闻:更多细节(也在Kusalananda的回答中)
  • 变更:最详细

5

内置的“ history”可以删除历史记录条目的范围,并将否定参数理解为相对于历史记录列表末尾的偏移量。

删除范围的示例:

history -d 123-130

或删除最后10个:

history -d -10--1

Bash 5手册页摘录:

'历史'

选件(如果提供)具有以下含义:

'-d OFFSET'删除位置OFFSET处的历史记录。如果OFFSET为正,则应指定它在显示历史记录时所显示的样子。如果OFFSET为负,则它被解释为相对于上一个历史位置大一个,因此负索引从历史末尾开始倒数,索引“ -1”表示当前的“ history -d”命令。

'-d START-END'删除位置START和END之间的历史记录条目。如上所述,对START和END的正值和负值进行了解释。

查看我相关的答案:删除一系列的bash历史记录

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.