Jak działają $ {0 ## * /} i $ {0% / *}?


Odpowiedzi:


38

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 .


2
Więc ... nie chcieli używać basenamei dirname? : D
Aaron D. Marasco,

8
Jedną z zalet jest to, że parametr susbstitution nie odradza podprocesu ...
jasonwryan 11.10.11

@ jasonwryan, czy możesz rozwinąć funkcjonalność * w powyższych dwóch przykładach? Lub dlaczego musimy tam umieścić *. W szczególności, w pierwszym przykładzie * jest umieszczone przed //; podczas gdy w drugim przykładzie * jest umieszczone po /. Jaka jest podstawowa różnica? Dzięki.
user785099,

3
Glob ( *) 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.
jasonwryan

5
To nie jest specyficzne dla bash, jest określone przez POSIX sh.
nyuszika7h
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.