如何在OS X中获取Bash版本号

10

我正在编写一个安装脚本,需要Bash 4.x。这个安装脚本也可以在OSX上使用。我知道在Linux系统上可以通过检查echo $BASH_VERSION环境变量来获取Bash版本,但是在Darwin中该怎么获取Bash版本呢?运行bash --version会给出:

GNU bash, version 4.3.33(1)-release (x86_64-apple-darwin14.1.0)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

这不是我想要的输出。我只想得到版本号,尤其是主版本号。


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Steinar
在我的Mac OS X 10.10.2 Yosemite上,echo $BASH_VERSION输出为3.2.57(1)-release。这不是你需要的吗?或者它不能被转换成你想要的形式吗? - Jonathan Leffler
3个回答

20

echo $BASH_VERSION 在 Mac OS X 上同样适用:

$ echo $BASH_VERSION
3.2.57(1)-release

如果您需要检查他们是否安装了更新的bash(例如通过Homebrew或MacPorts),可以通过调用其路径中的bash来执行该命令,只需在该版本的bash内部执行即可:

$ bash -c 'echo $BASH_VERSION'
4.3.30(1)-release

要获取版本号的某个部分,可以使用一个数组——BASH_VERSINFO,这样你就可以单独访问每个元素。如果你只想要主版本号(这是在我的系统上,我的登录 shell 是 Bash 3,但我已经安装了 Bash 4 来编写脚本):

$ echo ${BASH_VERSINFO[0]}
3
$ bash -c 'echo ${BASH_VERSINFO[0]}'
4
您还可以查看数组的完整内容:
$ echo "${BASH_VERSINFO[@]}"
3 2 57 1 release x86_64-apple-darwin14
$ bash -c 'echo "${BASH_VERSINFO[@]}"'
4 3 30 1 release x86_64-apple-darwin14.0.0

1
请注意,如果您当前不在bash中,可以使用bash -c 'echo $BASH_VERSION'。这也适用于OS X和Linux。 - Gordon Davisson
@sindhus 更新了我的答案,说明如何使用BASH_VERSINFO数组逐个访问版本的每个组件。 - Brian Campbell

2
您可以使用以下一行代码来提取版本号:
bash --version | awk 'NR==1{print $4}'

用户@Ubuntu服务器:~$ bash --version | awk 'NR == 1 {print $4}'

4.3.11(1)-release


输出的版本号一定是第四个“单词”吗? - Gordon Davisson

2

我似乎可以使用这个:

echo ${BASH_VERSINFO[0]}
3
echo ${BASH_VERSINFO[1]}
2
echo ${BASH_VERSINFO[2]}
57

并且

echo $BASH_VERSION
3.2.57(1)-release

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接