Je suis assez confus au sujet des expressions régulières suivantes trouvées dans un script shell:
${0##*/}
${0%/*}
Comment travaillent-ils?
Je suis assez confus au sujet des expressions régulières suivantes trouvées dans un script shell:
${0##*/}
${0%/*}
Comment travaillent-ils?
Réponses:
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ù $0est le nom d'un fichier, par exemple., $HOME/documents/doc.txtLe 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 .
*) 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.
basenameetdirname? : D