我想知道使用Linux命令的shell版本.我尝试了以下命令,但它显示了我所在的shell的类型.
命令:
echo $SHELL
Run Code Online (Sandbox Code Playgroud)
结果:
/bin/bash
Run Code Online (Sandbox Code Playgroud)
Muh*_*lim 30
这样做:
$SHELL --version
Run Code Online (Sandbox Code Playgroud)
在我的例子中,输出是:
zsh 5.0.2 (x86_64-pc-linux-gnu)
Run Code Online (Sandbox Code Playgroud)
Kei*_*son 10
这取决于您是否想知道默认登录shell的版本,或者您当前正在运行的shell的版本.他们不一定是一样的.
对于您的默认登录shell,正如接受的答案所说,$SHELL --version可能会起作用.大多数(但不是全部)炮弹接受一个--version选项.(dash不是.)这假设价值$SHELL没有改变(可能有正当理由这样做).
对于您当前正在运行的shell,如果恰好是bash您可以键入:
echo $BASH_VERSION
Run Code Online (Sandbox Code Playgroud)
用于tcsh:
echo $version
Run Code Online (Sandbox Code Playgroud)
用于zsh:
echo $ZSH_VERSION
echo $ZSH_PATCHLEVEL # shows more detailed information
Run Code Online (Sandbox Code Playgroud)
用于ksh:
echo $KSH_VERSION
Run Code Online (Sandbox Code Playgroud)
用于fish:
echo $version
Run Code Online (Sandbox Code Playgroud)
同样,这假设相关变量尚未被修改(很少有任何非恶意的原因来改变它).
Bash特别有一个数组变量$BASH_VERSINFO,它以一种更容易以编程方式处理的形式提供更多信息.
有一种情况,您的 shell 没有命令行参数来直接确定版本。这个案例是Bourne shell。对于 Bourne shell,我建议使用脚本:https : //www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh。该脚本非常小,因此查看它并了解它是如何工作的并不是什么大问题。我已经在 Linux 和 Solaris 上的不同 shell 中测试了这个脚本,它总是为我提供 shell 版本。
一些例子:
Ubuntu 18.04
$ sh -c './whatshell.sh'
ash (Busybox 1.x)
$ bash -c './whatshell.sh'
bash 4.4.19(1)-release
Run Code Online (Sandbox Code Playgroud)
CentOS 4
$sh -c './whatshell.sh'
bash 3.00.15(1)-release
Run Code Online (Sandbox Code Playgroud)
Solaris 10
~> sh -c './whatshell.sh'
ksh88 Version (..-)11/16/88i (posix octal base)
~> bash -c './whatshell.sh'
bash 4.1.7(3)-release
~> csh -c './whatshell.sh'
SVR4 Bourne shell (SunOS 5 variant)
Run Code Online (Sandbox Code Playgroud)
AIX 6.1
~> sh -c './whatshell.sh'
ksh88 Version (..-)11/16/88f
~> bash -c './whatshell.sh'
bash 4.2.0(1)-release
Run Code Online (Sandbox Code Playgroud)
这也是被标记为题外话的Bourne shell version问题的答案。