Je suis assez confus au sujet des expressions régulières suivantes trouvées dans un script shell:
${0##*/}
${0%/*}
Comment travaillent-ils?
Ce ne sont pas des expressions régulières, ce sont des exemples de l'expansion des paramètres de Bash: la substitution d'une variable ou d'un paramètre spécial par sa valeur. Le Wooledge Wiki a une bonne explication .
Fondamentalement, dans l'exemple que vous avez, se ${0##*/}
traduit par:
pour la variable $ 0 et le motif '/', les deux hachages signifient que, depuis le début du paramètre, supprimez la correspondance la plus longue (ou gourmande), jusqu'au motif inclus.
Ainsi, où $0
est le nom d'un fichier, par exemple., $HOME/documents/doc.txt
Le paramètre serait développé comme suit:doc.txt
De même, pour ${0%/*}
, le motif /
correspond à la fin du paramètre (the %
), la correspondance la plus courte ou non gloutonne étant supprimée - ce qui, dans l'exemple ci-dessus, vous en donnerait $HOME/documents
.
Voir aussi l'article sur le Wiki de Bash Hacker .
basename
etdirname
? : D*
) indique que tout ce qui va jusqu'au motif y compris sera supprimé. Par conséquent, pour le début du paramètre,#
il est à gauche et à la fin, en%
sens inverse.sh
.