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 $0
jest 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
.
basename
idirname
? : D