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.
man bash
et puis recherchéparameter##
?man bash
mais idiot, jai cherché${
donc il na pas trouvé de correspondance. Merci.