Jestem dość zdezorientowany co do następujących wyrażeń regularnych znalezionych w skrypcie powłoki:
${0##*/}
${0%/*}
Jak oni pracują?
Jestem dość zdezorientowany co do następujących wyrażeń regularnych znalezionych w skrypcie powłoki:
${0##*/}
${0%/*}
Jak oni pracują?
Odpowiedzi:
Nie są to wyrażenia regularne, są to przykłady rozszerzenia parametru Basha: podstawienie zmiennej lub parametru specjalnego przez jego wartość. Wiki Wooledge ma dobre wytłumaczenie .
Zasadniczo, w twoim przykładzie, ${0##*/}tłumaczy się jako:
dla zmiennej $ 0 i wzorca „/” dwa skróty oznaczają od początku parametru usunięcie najdłuższego (lub zachłannego) dopasowania - aż do wzorca włącznie.
Gdzie więc $0jest nazwa pliku, np. $HOME/documents/doc.txt, Wówczas parametr zostanie rozwinięty jako:doc.txt
Podobnie, ponieważ ${0%/*}wzorzec /jest dopasowywany do końca parametru (the %), z usuniętym najkrótszym lub niechcianym dopasowaniem - co dałoby ci w powyższym przykładzie $HOME/documents.
Zobacz także artykuł na Wiki Bash Hackera .
*) wskazuje, że wszystko do wzorca włącznie włącznie zostanie usunięte. Dlatego na początku parametru #znajduje się po lewej i na końcu %, działając w drugą stronę od prawej.
sh.
basenameidirname? : D