如何找到我正在使用的Bash版本?

(学习bash) 我试图检查bash的版本,所以我输入了/bin/bash -v
屏幕上输出了很多文本(.bashrc的内容以及从中引用的其他文件)。
由于这个命令,我可能搞砸了一些东西(比如覆盖了一些配置文件/设置了不正确的环境变量等)?
我也找不到关于-v开关的文档。

如果你运行了 bash -v 命令,那么你就会调用一个新的 bash shell,并激活了详细模式,因此你将会看到进一步命令的详细输出(至少你会看到 printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}")。要结束详细输出模式,请输入 exit 命令 - 你将回到原始的非详细模式的 bash shell(或者你之前所在的其他 shell)。 - ADTC
1如果你想要知道正在运行的shell版本,可以参考这个链接:https://stackoverflow.com/questions/3327013/how-to-determine-the-current-shell-im-working-on - Sohail Si
我该如何在这里“链接”另一个问题?(不仅仅是评论) - Sohail Si
7个回答

在bash中,-v参数代表详细模式,它指示bash尽可能多地打印有关其正在执行的操作的信息。启动时,它将打印出所有正在读取的配置信息。
要打印出bash的版本信息,请使用bash --version命令。

太棒了!我还找到了Bash的开关列表 - Zabba
41或者,如果您已经在运行bash shell,您可以输出特殊的BASH_VERSION变量的内容。echo "$BASH_VERSION"。还有一个特殊的数组(BASH_VERSINFO),其中包含每个版本号的单独元素。if ((BASH_VERSINFO[0] < 4)); then echo "抱歉,您至少需要bash-4.0才能运行此脚本。" >&2; exit 1; fi - geirha
3打字错误,应该是类似 [ "${BASH_VERSINFO}" -lt 4 ] 或者 [ "${BASH_VERSINFO[0]}" -lt 4 ] - bufh
太冗长了,使用http://askubuntu.com/a/899187/1004会更容易。 - sorin
1这种方法的问题是你无法百分之百确定任何脚本、符号链接或其他类型的配置错误是否会在登录时更改任何环境变量。正如我在下面回答的那样,Ctrl+x Ctrl+v将准确显示你当前运行的bash版本,而不受任何环境变量的影响。 - vegatripy
1值得指出的是,这将告诉您which bash的版本(在大多数系统上位于/bin/bash),这可能与某些提示符或脚本中运行的版本不同。(例如,以#!/usr/local/bin/bash开头的脚本可能使用不同的版本)。其他方法(在其他答案中有记录)也可能会有所帮助。 - mkasberg

当运行bash时(例如从gnome-terminal),您可以检查BASH_VERSION环境变量的值。
$ echo $BASH_VERSION
4.2.37(1)-release

如果值为空,那么你没有运行bash。

17这比仅运行 bash --version 更好,因为它确认您当前正在运行 bash,而不仅仅是在系统上安装了 bash。 - Flimm
2+1 bash --version 无法显示您当前使用的 bash 版本。 - gabeio
注意:设置BASH_VERSION并不能确保您正在运行bashexport BASH_VERSION; csh -c 'echo $BASH_VERSION $SHELL $shell',因此$BASH_VERSION也可能在csh中被设置 - Tino
@Tino嗯,你可以执行$SHELL --version命令,但是要注意,SHELL可能被覆盖了(而且并非所有的shell都支持--version标志)。 - bufh
$BASH_VERSION非常建议使用,而不是$SHELL --version。在Mac上需要这样做,以确保我没有使用系统的bash而是使用由软件包管理器(最新版本)管理的bash,即使$SHELL=/bin/bash,但仍需正确配置并运行我所需的版本。很遗憾,无法在此处再次点赞。 - user2943160

有一个快捷键可以显示当前shell信息:
Ctrl + x Ctrl + v
来自man bash
   display-shell-version (C-x C-v)
          Display version information about the current instance of bash.

如果你搞乱了环境变量,这是最好的选择。

不,一切都好。来自man bash
   --verbose
          Equivalent to  -v.

这次不太安静。试试看。
--version 

相反。


通常的--version可能会给你太多的多行样板,所以我使用的是:
bash -c 'echo $BASH_VERSION'

Pawel's answer的副本 - wjandrea
5@wjandrea 这与Paweł Nadolski的回答不同。它在一个新的bash shell中运行命令。这种方法的一个好处是它不需要当前使用的shell是bash。另一个好处是,即使在bash中,也可以(虽然不是好的做法)将BASH_VERSION设置为不同的值。它甚至可以作为环境变量导出。即使在运行export BASH_VERSION=foobar之后,这里给出的方法仍然有效,因为新的bash shell在执行读取BASH_VERSION的参数扩展之前会自动重置自己的BASH_VERSION - Eliah Kagan
@EliahKagan,在我更新和升级的16.04 LTS系统中,通过使用16.04.1 iso文件进行安装,bash --version显示4.3.48(1)-release,而apt-cache policy bash显示4.3-14ubuntu1.2。我已确认可执行文件bash来自于“bash”软件包。这应该如何解释呢?对于“usb-creator-gtk”,存在类似的不匹配情况,但在这种情况下,apt-cache输出是正确的。-- 我们可以得出结论,较高的版本号是正确的(可能有人忘记更新另一个版本)吗? - sudodus
1@sudodus 一个程序的版本号可能与其所在的APT软件包的版本号不同。这就是你在这里看到的情况。4.3.48... 是Bash的版本,4.3-14...bash软件包的版本。 - wjandrea
@EliahKagan 我之前忘了提到,谢谢你纠正我!我很感激你的知识。 - wjandrea

只获取版本而不是多行文本:
$ bash --version | head -1 | cut -d ' ' -f 4

或者:bash --version | awk 'BEGIN{ RS="[ \n]"; FS="[ \n]" }s{ print $0; exit}/version/{ s=1 }' - Luuk

如果你使用的是Windows,并且想知道你正在运行的Git Bash版本,它是Git for Windows的一部分。 所以Git Bash的版本是:
git --version

git版本2.23.0.windows.1
在同一台机器上运行时:
echo $BASH_VERSION

4.4.23(1)-release

通常情况下,为了升级到最新版本,您需要下载并安装Windows版Git的最新版本,请参考常见问题解答。如果安装在适当的配置文件夹中,设置和自定义应该可以保留。

谢谢Sheryl,但这不是一个Ubuntu论坛吗? - Kurankat
猜是吧。对不起,我在寻找Git Bash时,谷歌给了我这篇帖子,而我没有注意到我在哪个StackExchange网站上。我发帖是为了下次能方便地找到这些信息,因为即使是找到了这篇帖子,也尝试了好几次。 - SherylHohman
这是不正确的。git --version与Bash无关,无论您是从命令提示符还是从Git for Windows附带的Bash模拟器运行它。"Git Bash"是针对Windows编译的一组POSIX实用程序之一就是Bash。终端(类似于MacOS上的Terminal.app)是mintty。看起来在模拟器上获取Bash版本与在Unix机器上相同。请考虑删除、编辑或证明我错误。 :D PS Win10有一个功能,可以在Windows上本地运行*nix实用程序:https://superuser.com/a/1059340 - Sinjai