我正在编写一个使用 的脚本read -i
,因此它需要 Bash 4.0 或更高版本。
不幸的是,截至 2020 年初,macOS 仍然附带 Bash 3.x,并且我的脚本的许多用户将使用 Mac。由于 Apple 已将默认 shell 更改为 zsh,因此我不希望他们会更新捆绑版本。
因此,我希望我的脚本能够检测 Bash 是否足够新,并退出并显示一条有用的错误消息,指导用户升级。
我知道我可以比较${BASH_VERSION}
,但这是一个具有非数字、可能不可靠格式的字符串。对此做出假设感觉很脆弱。
实现这一目标的最佳方法是什么?
requireBash4() {
if <something here>; then
>&2 echo "Bash 4.0 or newer is required."
>&2 echo "Once you're upgraded, re-run this script."
exit 1
fi
}
答案1
if ((BASH_VERSINFO >= 4)); then ...
请注意,这BASH_VERSINFO
是一个数组。与 bash 中的任何数组一样,将其用作普通变量是指其第 0 个元素。((BASH_VERSINFO[0] >= 4))
如果你觉得更清楚的话也可以使用。
是的,至少从 bash 2.0 开始就支持这个变量和语法。
BASH_VERSINFO
一个只读数组变量,其成员保存此 bash 实例的版本信息。分配给数组成员的值如下:
BASH_VERSINFO[0]
主要版本号(发行版)。
BASH_VERSINFO[1]
次要版本号(版本)。
BASH_VERSINFO[2]
补丁级别。
BASH_VERSINFO[3]
构建版本。
BASH_VERSINFO[4]
发布状态(例如 beta1)。
BASH_VERSINFO[5]
的价值MACHTYPE
。