GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistit Bash>=4.0?

Píšu skript, který používá read -i , takže vyžaduje Bash 4.0 nebo novější.

Bohužel od začátku roku 2020 se macOS stále dodává s Bash 3.x a mnoho uživatelů mého skriptu bude používat Mac. Protože Apple změnil výchozí shell na zsh, nemám naději, že aktualizuje přibalenou verzi.

Proto chci, aby můj skript zjistil, zda je Bash dostatečně nový, a skončil s užitečnou chybovou zprávou, která uživatele nasměruje k upgradu.

Vím, že mohu porovnat ${BASH_VERSION} , ale to je řetězec s nenumerickým, potenciálně nespolehlivým formátem. Je křehké dělat si o tom domněnky.

Jaký je nejlepší způsob, jak toho dosáhnout?

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
}

Přijatá odpověď:

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

Všimněte si, že BASH_VERSINFO je pole. Stejně jako u jakéhokoli pole v bash, jeho použití jako prosté proměnné odkazuje na jeho 0-tý prvek. Můžete také použít ((BASH_VERSINFO[0] >= 4)) pokud vám to přijde jasnější.

A ano, tato proměnná a syntaxe jsou podporovány minimálně od bash 2.0.

BASH_VERSINFO

Proměnná pole pouze pro čtení, jejíž členové obsahují informace o verzi
pro tuto instanci bash. Hodnoty přiřazené členům pole
jsou následující:

BASH_VERSINFO[0] Hlavní číslo verze (vydání).
BASH_VERSINFO[1] Číslo vedlejší verze (verze).
BASH_VERSINFO[2] Úroveň opravy.
BASH_VERSINFO[3] Verze sestavení.
BASH_VERSINFO[4] Stav vydání (např. beta1).
BASH_VERSINFO[5] Hodnota MACHTYPE .


Linux
  1. Jak ladit Bash skript?

  2. Jak zkontrolovat verzi CentOS

  3. Jak zjistit, zda má soubor v Bash kusovník UTF-8?

  1. Jak používat příkazy historie Bash

  2. Jak napsat smyčku v Bash

  3. Jak zkontrolovat verzi Redhat

  1. Jak přepnout verzi PHP

  2. Jak porovnat dva řetězce ve formátu verze oddělené tečkami v Bash?

  3. Jak zjistit dostupnost GUI v Bash/Shell?