GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Cara Mendeteksi Bash>=4.0?

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] Nilai MACHTYPE .


Linux
  1. Cara menggunakan perintah riwayat Bash

  2. Cara menulis loop di Bash

  3. Bagaimana Cara Men-debug Skrip Bash?

  1. Cara memeriksa versi Redhat

  2. Cara Beralih Versi PHP

  3. Cara Memeriksa Versi CentOS

  1. Bagaimana cara membandingkan dua string dalam format versi yang dipisahkan titik di Bash?

  2. Bagaimana cara mendeteksi jika suatu file memiliki BOM UTF-8 di Bash?

  3. Bagaimana cara mendeteksi ketersediaan GUI di Bash/Shell?