Variable Bash $ {0 ## * /} (Français)

Jessaie de comprendre la variable ${0##*/} que jai rencontrée dans un script bash.

Je comprends que $0 contient le nom, ou le chemin, du script, puis ## fonctionne comme dans ${parameter##pattern} ( source ).

Mais je ne comprends pas ce que fait le / ici. Je ne connais que ce pli de syntaxe avec deux barres obliques: ${parameter/pat/string}

Quand je echo cette variable dans bash, jobtiens bash 🙂

Enfin, je nai pas lautorisation de partager le script. Permettez-moi simplement de dire que la variable sappelle SOFT="${0##*/}" et est utilisée dans une instruction printf "Error message sent by $SOFT"

Réponse

Ceci coupe tous les éléments de chemin précédents, comme basename $0 ferait laffaire. ## essaie de trouver le développement correspondant le plus long du modèle de préfixe:

 $ x=/a/b/c/d $ echo ${x##*/} d $ basename $x d  

Depuis la page de manuel:

 ${parameter##word} Remove matching prefix pattern. The word is expanded to produce a pattern just as in pathname expansion. If the pattern matches the beginning of the value of parameter, then the result of the expansion is the expanded value of parameter with the shortest matching pattern (the ``#"" case) or the longest matching pat‐ tern (the ``##"" case) deleted.  

La raison dutiliser ${0##*/} est que cela nimplique pas un appel de programme externe, mais cela obscurcit en quelque sorte ce qui se passe.

Commentaires

  • Juste curieux, comment avez-vous obtenu la page de manuel pour cela?
  • Avez-vous essayé man bash et puis recherché parameter##?
  • Oui, jai fait man bash mais idiot, jai cherché ${ donc il na pas trouvé de correspondance. Merci.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *