シェルに、バージョンを直接判別するためのコマンド ライン パラメーターがない場合があります。このケースはボーンシェルです。 Bourne シェルの場合は、スクリプト https://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh を使用することをお勧めします。スクリプトは非常に小さいので、レビューしてどのように機能するかを理解するのは大きな問題ではありません。 Linux と Solaris のさまざまなシェル内でこのスクリプトをテストしたところ、常にシェルのバージョンが表示されました。
いくつかの例:
Ubuntu 18.04
$ sh -c './whatshell.sh'
ash (Busybox 1.x)
$ bash -c './whatshell.sh'
bash 4.4.19(1)-release
CentOS 4
$sh -c './whatshell.sh'
bash 3.00.15(1)-release
ソラリス 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)
AIX 6.1
~> sh -c './whatshell.sh'
ksh88 Version (..-)11/16/88f
~> bash -c './whatshell.sh'
bash 4.2.0(1)-release
これは、トピック外としてマークされた Bourne シェル バージョンの質問に対する回答でもあります。
コマンドを使うだけ
echo $BASH_VERSION
シェルのバージョンを提供する必要があります。 BASH_VERSION は、シェルのバージョンを含む環境変数です。
デフォルトのログイン シェルのバージョンを知りたいのか、それとも現在実行中のシェルのバージョンを知りたいのかによって異なります。それらは必ずしも同じではありません。
受け入れられた回答が示すように、デフォルトのログインシェルの場合、 $SHELL --version
動作する可能性があります。ほとんどの (すべてではない) シェルは --version
を受け入れます オプション。 (dash
しません。) そして、これは $SHELL
の値が 変更されていません (変更する正当な理由がある場合があります)。
現在実行中のシェルの場合、たまたま bash
次のように入力できます:
echo $BASH_VERSION
tcsh
の場合 :
echo $version
zsh
の場合 :
echo $ZSH_VERSION
echo $ZSH_PATCHLEVEL # shows more detailed information
ksh
の場合 :
echo $KSH_VERSION
fish
の場合 :
echo $version
繰り返しますが、これは関連する変数が変更されていないことを前提としています (変数を変更する悪意のない理由はめったにありません)。
特に Bash には配列変数 $BASH_VERSINFO
があります プログラムで処理しやすい形式でより多くの情報を提供します。 $BASH_VERSINFO
を印刷中 最初の要素のみを出力します。すべての要素を印刷するには:
echo "${BASH_VERSINFO[@]}"
これでできます:
$SHELL --version
私の場合、出力は次のとおりです。
zsh 5.0.2 (x86_64-pc-linux-gnu)