Il y a deux façons d'aborder ce que vous voulez réaliser.
1. Utilisez $ BASH_VERSION
Il suffit juste de voir ce qui est $BASH_VERSION
variable. Personnellement, j'utiliserais un sous-shell comme ceci:
$ (read -d "." version trash <<< $BASH_VERSION; echo "$version" )
4
Notez que la <<<
syntaxe pour here-doc n'est pas portable, si vous allez l'utiliser avec /bin/sh
, qui est Dash sur Ubuntu et pourrait être autre chose sur un système différent
Vous pouvez également utiliser la déclaration de cas ou la déclaration if. Personnellement, je ferais ceci:
bash-4.3$ case $BASH_VERSION in 4.*) echo "Can use associative arrays";; ?) echo "can't use associative arrays" ;; esac
Can use associative arrays
Probablement pour des raisons de portabilité, vous devriez probablement vérifier si une telle variable est même définie en premier lieu avec quelque chose comme [ -n $BASH_VERSION ]
Cela peut totalement être réécrit en fonction à utiliser dans un script. Quelque chose de long les lignes de:
#!/bin/bash
version_above_4(){
# check if $BASH_VERSION is set at all
[ -z $BASH_VERSION ] && return 1
# If it's set, check the version
case $BASH_VERSION in
4.*) return 0 ;;
?) return 1;;
esac
}
if version_above_4
then
echo "Good"
else
echo "No good"
fi
Ce n'est pas un monoplace, bien que ce soit beaucoup mieux. La qualité plutôt que la quantité.
2. Vérifiez ce qui est installé
Pour cela, vous devez filtrer la sortie de la apt-cache policy
sorte
$ apt-cache policy bash | awk -F '[:.]' '/Installed:/{printf "%s\n",substr($2,2)}'
4
dpkg-query
peut également être utile avec un filtrage via awk
.
$ dpkg-query -W bash | awk '{print substr($2,1,1)}'
4
Notez que ce n'est pas portable, car s'il n'y en a pas dpkg
ou apt
installé sur un système (par exemple, RHEL ou FreeBSD), cela ne vous fera aucun bien.
3. Utilisez set -e pour quitter le script en cas d'erreur
Une façon de le contourner consiste simplement à utiliser des tableaux associatifs et à quitter lorsque bash
vous ne pouvez pas les utiliser. set -e
la ligne ci #!/bin/bash
- dessous permettra au script de se fermer si le script ne peut pas utiliser de tableau associatif.
Cela vous demandera de dire explicitement à l'utilisateur: "Hé, vous avez vraiment besoin de la version 4.3 ou supérieure de bash, sinon le script ne fonctionnera pas". Ensuite, la responsabilité incombe à l'utilisateur, même si certains pourraient affirmer que ce n'est pas vraiment une bonne approche pour le développement de logiciels.
4. Abandonnez tout espoir et écrivez des scripts portables, compatibles POSIX
bash
les scripts ne sont pas portables car sa syntaxe n'est pas compatible avec le shell Bourne. Si le script que vous écrivez va être utilisé sur une gamme de systèmes différents, pas seulement Ubuntu seul, alors abandonnez tout espoir et trouvez des moyens d'utiliser autre chose que des tableaux associatifs. Cela peut inclure la présence de deux tableaux ou l'analyse d'un fichier de configuration. Pensez également à passer à un autre langage, Perl ou Python, où la syntaxe est au moins plus portable que bash
.
$BASH_VERSION
et$BASH_VERSINFO
?