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