Bash> = 4.0を検出する方法は?

Bash> = 4.0を検出する方法は?

.soを使用するスクリプトを作成しているため、read -iBash 4.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
}

ベストアンサー1

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

これはBASH_VERSINFO配列であることに注意してください。 Bashの他の配列と同様に、これを一般変数として使用すると、0番目の要素が参照されます。((BASH_VERSINFO[0] >= 4))もっと明確だと感じたら使えます。

はい、この変数と構文はbash 2.0以降からサポートされています。

BASH_VERSINFO

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

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

おすすめ記事