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
の値 。