我只是通过官方 bash 存储库(我通常不这样做)进行一些无关的操作,但注意到 bash 5 已经处于测试阶段。我只是对 bash 5 中的新内容感到好奇,但找不到任何信息。有人可以总结一下 4.4 和 5 版本的 Bash 之间的变化吗
Jac*_*ose 18
如果您和我一样,正在寻找标题功能而不是完整的变更日志,那么维护者 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;这是一个疏忽,它是无条件设置的,当脚本传递大量参数时会导致性能问题。
他还参考了这两个文件,以防您想要更多:
`history' 内置函数可以删除历史条目的范围,并将负参数理解为从历史列表末尾的偏移量。
删除范围的示例:
history -d 123-130
Run Code Online (Sandbox Code Playgroud)
或删除最后 10 个:
history -d -10--1
Run Code Online (Sandbox Code Playgroud)
摘自Bash 5 手册页:
'历史'
选项(如果提供)具有以下含义:
'-d OFFSET' 删除位置 OFFSET 的历史条目。如果 OFFSET 为正数,则应按照显示历史记录时出现的方式进行指定。如果 OFFSET 为负,则它被解释为相对于比最后一个历史位置大 1 的位置,因此负索引从历史的末尾开始倒计时,并且“-1”的索引指的是当前的“history -d”命令。
'-d START-END' 删除位置 START 和 END 之间的历史条目,包括。START 和 END 的正值和负值按上述解释。
请参阅我的相关答案:Delete a range of bash history
归档时间: |
|
查看次数: |
9222 次 |
最近记录: |