GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie erkennt man Bash>=4.0?

Ich schreibe ein Skript, das read -i verwendet , daher ist Bash 4.0 oder neuer erforderlich.

Leider wird macOS Anfang 2020 immer noch mit Bash 3.x ausgeliefert, und viele Benutzer meines Skripts werden Macs verwenden. Da Apple die Standard-Shell auf zsh geändert hat, habe ich keine Hoffnung, dass sie die gebündelte Version aktualisieren werden.

Daher möchte ich, dass mein Skript erkennt, ob Bash neu genug ist, und sich mit einer hilfreichen Fehlermeldung beendet, die den Benutzer zum Upgrade auffordert.

Ich weiß, dass ich ${BASH_VERSION} vergleichen kann , aber das ist eine Zeichenfolge mit einem nicht numerischen, potenziell unzuverlässigen Format. Es fühlt sich zerbrechlich an, Vermutungen darüber anzustellen.

Was ist der beste Weg, dies zu erreichen?

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
}

Akzeptierte Antwort:

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

Beachten Sie, dass BASH_VERSINFO ist ein Array. Wie bei jedem Array in Bash bezieht sich die Verwendung als einfache Variable auf sein 0-tes Element. Sie können auch ((BASH_VERSINFO[0]>=4)) verwenden wenn Sie es klarer finden.

Und ja, diese Variable und Syntax werden mindestens seit Bash 2.0 unterstützt.

BASH_VERSINFO

Eine schreibgeschützte Array-Variable, deren Mitglieder Versionsinformationen
für diese Instanz von bash enthalten. Die den Mitgliedern des Arrays
zugewiesenen Werte lauten wie folgt:

BASH_VERSINFO[0][code> Die Hauptversionsnummer (das Release).
BASH_VERSINFO[1] Die Nebenversionsnummer (die Version).
BASH_VERSINFO[2] Das Patch-Level.
BASH_VERSINFO[3] Die Build-Version.
BASH_VERSINFO[4] Der Veröffentlichungsstatus (z. B. Beta1).
BASH_VERSINFO[5] Der Wert von MACHTYPE .


Linux
  1. Wie schreibe ich eine Schleife in Bash?

  2. So wechseln Sie die PHP-Version

  3. So überprüfen Sie die CentOS-Version

  4. Wie kann man in Bash erkennen, ob eine Datei eine UTF-8-BOM hat?

  5. Wie erkennt man die Verfügbarkeit von GUI in Bash/Shell?

So überprüfen Sie die CentOS-Version

So überprüfen Sie die Ubuntu-Version

So überprüfen Sie die Python-Version

So überprüfen Sie die Java-Version

Wie überprüfe ich die OpenGL-Version?

So führen Sie ein Bash-Skript aus