这 邮件列表 最近确认了 Bash-5.0 的发布。 而且,令人兴奋的是,它带有新功能和变量。
好吧,如果您一直在使用 Bash 4.4.XX,那么您一定会喜欢 Bash 的第五个主要版本。 重击.
第五版侧重于新的 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 变量的方式的变化意味着 namerefs 的某些使用将表现不同,尽管我试图最小化兼容性问题。 默认情况下,如果启用扩展调试模式,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? 如果是这样,这个更新会改变你的想法吗?
在下面的评论中让我们知道您的想法。