我只是在浏览官方 bash 存储库(我通常不这样做)来查找一些不相关的内容,但注意到 bash 5 已经处于测试阶段。我只是好奇 bash 5 中的新增内容,但找不到任何信息。有人能总结一下 Bash 4.4 和 5 版本之间的变化吗
答案1
版本 4.4 和 5.0(2019-01-07 发布)之间所做的更改可以在源发行版的文件bash
中找到。NEWS
bash
这是它的链接(更改太多,无法在此列出)。
答案2
如果您像我一样正在寻找标题功能而不是完整的变更日志,这个帖子维护者 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 的某些使用会表现不同。默认情况下,如果启用了扩展调试模式,shell 仅在启动时设置 BASH_ARGC 和 BASH_ARGV;这是一个疏忽,它是无条件设置的,并且当脚本传递大量参数时会导致性能问题。
如果您需要更多信息,他还参考了这两个文件:
答案3
“history”内置函数可以删除历史记录条目的范围,并将负参数理解为距历史列表末尾的偏移量。
删除范围的示例:
history -d 123-130
或删除最后 10 个:
history -d -10--1
摘自Bash 5 手册页:
'历史'
选项(如果提供)具有以下含义:
'-d OFFSET' 删除 OFFSET 位置的历史条目。如果 OFFSET 为正,则应按显示历史记录时的显示值指定。如果 OFFSET 为负数,则它被解释为相对于比最后一个历史记录位置大 1 的值,因此负索引从历史记录末尾开始倒数,索引“-1”指的是当前的“history -d”命令。
'-d START-END' 删除位置 START 和 END 之间(含)之间的历史记录条目。 START 和 END 的正值和负值的解释如上所述。
参见我的相关回答:删除一系列 bash 历史记录