"${0##*/}"
Récupérer le nom du script.
(Pas toujours fiable car $0 peut contenir n'importe quoi si on le souhaite.)
Exemple :
- Tu lances le script x depuis ton home ;
- $0 a alors pour valeur /home/alkritere/x ;
- Pour extraire le "x" de cette chaîne, t'utilises ce que l'on appelle une PE (parameter expansion). Dans ce cas, elle consiste à enlever, à partir du début de la chaîne (#), tous les caractères rencontrés (*) jusqu'à tomber sur le dernier (##) caractère "/", en la parcourant de gauche à droite.
Si tu veux t'arrêter au premier caractère "/", tu utilises un seul "#".
Donc, avec "${0#*/}", tu obtiendras « home/alkritere/x »
et avec "${0##*/}", tu obtiendras seulement « x ».
&2
Rediriger stdout vers stderr (descripteur de fichier 2).
Le message indiquant comment utiliser le script est affiché sur le flux de sortie permettant d'afficher des messages d'erreurs, et non sur la sortie standard.
/dev/null
Rediriger stdout vers /dev/null pour ne pas afficher la sortie de printenv(1).
De cette manière, on vérifie que printenv(1) renvoie bien quelque chose, sans pour autant faire apparaître sa sortie sur la sortie standard.
De plus, on n'a pas besoin de rediriger stderr car la commande ne renvoie pas de messages d'erreurs si la chaîne passée en argument ne correspond pas à une variable d'environnement.