GNU/Linux >> Linux の 問題 >  >> Linux

バッシュを検出する方法>=4.0?

read -iを使用するスクリプトを書いています 、したがって、Bash4.0以降が必要です。

残念ながら、2020年の初めの時点で、macOSはまだBash 3.xに同梱されており、私のスクリプトの多くのユーザーはMacを使用することになります。 Appleがデフォルトのシェルをzshに変更したので、バンドルされたバージョンが更新されることを期待していません。

そのため、スクリプトでBashが十分に新しいかどうかを検出し、ユーザーにアップグレードを指示する有用なエラーメッセージを表示して終了する必要があります。

${BASH_VERSION}を比較できることはわかっています 、ただし、これは数値ではなく、信頼できない可能性のある形式の文字列です。それについて推測するのは壊れやすいと感じます。

これを達成するための最良の方法は何ですか?

requireBash4() {
  if <something here>; then
    >&2 echo "Bash 4.0 or newer is required."
    >&2 echo "Once you're upgraded, re-run this script."
    exit 1
  fi
}

承認された回答:

if ((BASH_VERSINFO >= 4)); then ...

BASH_VERSINFOに注意してください は配列です。 bashの他の配列と同様に、それをプレーン変数として使用すると、その0番目の要素が参照されます。 ((BASH_VERSINFO[0] >= 4))を使用することもできます より明確になったら

はい、この変数と構文は、少なくともbash2.0以降でサポートされています。

BASH_VERSINFO

このbashのインスタンスのバージョン情報を
メンバーが保持する読み取り専用の配列変数。配列のメンバーに割り当てられる値は次のとおりです。

BASH_VERSINFO[0] メジャーバージョン番号(リリース)。
BASH_VERSINFO[1] マイナーバージョン番号(バージョン)。
BASH_VERSINFO[2] パッチレベル。
BASH_VERSINFO[3] ビルドバージョン。
BASH_VERSINFO[4] リリースステータス(例:beta1)。
BASH_VERSINFO[5] MACHTYPEの値 。


Linux
  1. Bashでループを作成する方法

  2. Bashでドット区切りバージョン形式の2つの文字列を比較するには?

  3. BashでファイルにUTF-8 BOMがあるかどうかを検出する方法は?

  1. Bash履歴コマンドの使用方法

  2. Redhatのバージョンを確認する方法

  3. Bash/Shell で GUI の可用性を検出する方法は?

  1. PHPバージョンを切り替える方法

  2. Bashスクリプトをデバッグする方法は?

  3. CentOS のバージョンを確認する方法