J'écris un script qui utilise read -i
, il nécessite donc Bash 4.0 ou une version plus récente.
Malheureusement, au début de 2020, macOS est toujours livré avec Bash 3.x, et de nombreux utilisateurs de mon script utiliseront des Mac. Depuis qu'Apple a changé le shell par défaut en zsh, je n'ai aucun espoir qu'ils mettent à jour la version groupée.
En tant que tel, je souhaite que mon script détecte si Bash est suffisamment nouveau et se termine avec un message d'erreur utile qui invite l'utilisateur à effectuer la mise à niveau.
Je sais que je peux comparer ${BASH_VERSION}
, mais il s'agit d'une chaîne au format non numérique et potentiellement peu fiable. Il semble fragile de faire des suppositions à ce sujet.
Quelle est la meilleure façon d'y parvenir ?
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
}
Réponse acceptée :
if ((BASH_VERSINFO >= 4)); then ...
Notez que BASH_VERSINFO
est un tableau. Comme avec n'importe quel tableau dans bash, l'utiliser comme variable simple fait référence à son 0-ème élément. Vous pouvez également utiliser ((BASH_VERSINFO[0] >= 4))
si vous le trouvez plus clair.
Et oui, cette variable et cette syntaxe sont supportées depuis au moins bash 2.0.
BASH_VERSINFO
Une variable de tableau en lecture seule dont les membres contiennent des informations de version
pour cette instance de bash. Les valeurs attribuées aux membres du tableau
sont les suivantes :
BASH_VERSINFO[0]
Le numéro de version majeure (la release).BASH_VERSINFO[1]
Le numéro de version mineure (la version).BASH_VERSINFO[2]
Le niveau de correctif.BASH_VERSINFO[3]
La version de compilation.BASH_VERSINFO[4]
Le statut de la version (par exemple, beta1).BASH_VERSINFO[5]
La valeur deMACHTYPE
.