git bash 与 Ubuntu bash。
除了 bash 的版本之外,基本上没有什么不同。因为 bash 就是 bash。很可能在不同的时间出于不同的目的在 PC 上安装了不同版本的 bash。它们也很可能在 PC 上的不同文件夹中找到。
从两个不同的 shell 运行以下代码。这将返回 bash 的版本:
echo "$BASH_VERSION"
在这台 PC 上,使用两个终端(MinGW 和 Ubuntu)返回以下版本的 bash:(见下面的图片链接)
5.0.17(1) - release
4.4.23(1) - release
大多数使用 PC 已有一段时间的人可能会发现他们的 PC 上安装了两个(或更多)不同版本的 bash。在这台 PC 上,旧版本的 bash 早在一段时间前就已安装。
在这台 PC 上安装 Cygwin 时,可能已经安装了旧版本的 bash。或者可能是很久以前安装 Git 时安装了旧版本的 bash。现在真的无所谓了。在这台 PC 上,至少可以在以下位置找到 bash:
C:\cygwin64\bin\bash.exe
C:\Program Files\Git\bin\bash.exe
C:\Program Files\Git\git-bash.exe
此 PC 上的 Windows 10 已更新。具体来说,WSL 内核已从 WSL 更新到 WSL2。此更新的一部分涉及开启一些 Windows 功能,包括:适用于 Linux 的 Windows 子系统。
有一个旧(虚拟)版本的 Ubuntu (18.04) 已安装在这台 PC 上一段时间。但是那个旧版本的 Ubuntu 在这次更新中消失了。此 WSL2 更新改变了 Linux (Ubuntu) 在此 PC 上的运行方式。在 WSL2 更新之后,Ubuntu 是从 Microsoft Store 安装的。这是 Ubuntu 20.04。
此 WSL2 更新和新安装的 Ubuntu 版本还在这台 PC 上安装了更新版本的 bash。而这个较新版本的 bash 就是上面显示的较新版本的 bash。
了解这两个 bash 版本之间差异的另一个好方法是在每个 shell 中输入以下内容:
type ping
结果应该清楚地表明一个版本的 bash 提供了来自 Windows 的源代码,而另一个版本的 bash 提供了来自 Ubuntu 的源代码。
ping is /c/windows/system32/ping
ping is /usr/bin/ping
有时一张图片胜过一千字。下面附上两个并排的新 Windows 终端。
这些终端显示两个不同版本的 bash。 Echo 返回在 MinGW shell 中使用的旧版本的 bash,而 Echo 返回在 Ubuntu shell 中使用的新版本的 bash。