Saya sedang menulis skrip yang menggunakan read -i
, sehingga memerlukan Bash 4.0 atau yang lebih baru.
Sayangnya, pada awal 2020, macOS masih dikirimkan dengan Bash 3.x, dan banyak pengguna skrip saya akan menggunakan Mac. Karena Apple telah mengubah shell default menjadi zsh, saya tidak berharap mereka akan memperbarui versi yang dibundel.
Karena itu, saya ingin skrip saya mendeteksi apakah Bash cukup baru dan keluar dengan pesan kesalahan bermanfaat yang mengarahkan pengguna untuk meningkatkan versi.
Saya tahu saya dapat membandingkan ${BASH_VERSION}
, tapi itu adalah string dengan format non-numerik, yang berpotensi tidak dapat diandalkan. Rasanya rapuh untuk membuat asumsi tentang hal itu.
Apa cara terbaik untuk mencapai ini?
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
}
Jawaban yang Diterima:
if ((BASH_VERSINFO >= 4)); then ...
Perhatikan bahwa BASH_VERSINFO
adalah sebuah array. Seperti halnya array di bash, menggunakannya sebagai variabel biasa mengacu pada elemen ke-0-nya. Anda juga dapat menggunakan ((BASH_VERSINFO[0] >= 4))
jika Anda merasa lebih jelas.
Dan ya, variabel dan sintaks ini didukung setidaknya sejak bash 2.0.
BASH_VERSINFO
Variabel array readonly yang anggotanya menyimpan informasi versi
untuk instance bash ini. Nilai yang diberikan ke anggota larik
adalah sebagai berikut:
BASH_VERSINFO[0]
Nomor versi utama (rilis).BASH_VERSINFO[1]
Nomor versi minor (versi).BASH_VERSINFO[2]
Tingkat tambalan.BASH_VERSINFO[3]
Versi build.BASH_VERSINFO[4]
Status rilis (mis., beta1).BASH_VERSINFO[5]
NilaiMACHTYPE
.