Jest to polecenie zshexpn, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z naszych wielu bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online systemu MAC OS
PROGRAM:
IMIĘ
zshexpn - rozwinięcie i podstawienie zsh
OPIS
Następujące rodzaje rozwinięć wykonuje się we wskazanej kolejności w pięciu krokach:
Wsparcia Sponsorskiego Ekspansja
Odbywa się to tylko w powłokach interaktywnych.
Alias Ekspansja
Aliasy są rozwijane bezpośrednio przed analizą wiersza poleceń, jak wyjaśniono
w obszarze Aliasing w zshmisc(1).
Przetwarzanie Podstawienie
Parametr Ekspansja
Command Podstawienie
Arytmetyka Ekspansja
Klamra Ekspansja
Tych pięć jest wykonywanych w jednym kroku, od lewej do prawej. Po tych
rozwinięcia, wszystkie niecytowane wystąpienia znaków `\', ''' i `"' Czy
oddalony.
Nazwa pliku Ekspansja
Jeśli SH_FILE_EXPANSION opcja jest ustawiona, kolejność rozwijania jest modyfikowana
kompatybilność z sh oraz ksh. W tym wypadku filename ekspansja jest wykonywane
natychmiast po alias ekspansja, poprzedzający zestaw pięciu wspomnianych rozszerzeń
powyżej.
Nazwa pliku Pożądania
To rozszerzenie, powszechnie określane jako globać się, jest zawsze wykonywane jako ostatnie.
W poniższych sekcjach szczegółowo opisano typy rozszerzeń.
HISTORIA EKSPANSJA
Rozszerzanie historii pozwala na użycie słów z poprzednich linii poleceń w linii poleceń
piszesz. Upraszcza to poprawianie ortografii i powtarzanie skomplikowanych
polecenia lub argumenty.
Bezpośrednio przed wykonaniem każde polecenie zapisywane jest na liście historii, której rozmiar
kontroluje ROZMIAR HIST parametr. Zawsze zachowywane jest jedno najnowsze polecenie
w każdym przypadku. Każde polecenie zapisane na liście historii nazywane jest historią wydarzenie i jest
przypisany numer, zaczynający się od 1 (jeden), gdy powłoka uruchamia się. Numer historii
które możesz zobaczyć w swoim znaku zachęty (zobacz ROZSZERZENIE SEKWENCJI MONITORÓW w zshmisc(1)) jest
numer, który ma być przypisany do Następny dowództwo.
Omówienie
Ekspansja historii rozpoczyna się od pierwszego znaku histchary parametr, tj
`!' domyślnie i może wystąpić w dowolnym miejscu wiersza poleceń; rozszerzenia historii nie
gniazdo. `!' można uciec za pomocą `\' lub może być ujęte w parę pojedynczych cudzysłowów
(''), aby stłumić jego specjalne znaczenie. Podwójne cudzysłowy będą nie popracuj nad tym. Następny
ten znak historii jest opcjonalnym oznaczeniem zdarzenia (zobacz sekcję `Event
Oznaczenia”), a następnie opcjonalne oznaczenie słowa (sekcja „Desygnatory słów”); Jeśli
żaden z tych desygnatorów nie jest obecny, nie następuje rozszerzenie historii.
Wiersze wejściowe zawierające rozwinięcia historii są powtarzane po rozwinięciu, ale przed jakimkolwiek
mają miejsce inne rozwinięcia i przed wykonaniem polecenia. Jest to rozwinięta forma
które jest rejestrowane jako wydarzenie historyczne do późniejszych odniesień.
Domyślnie odwołanie do historii bez oznaczenia zdarzenia odnosi się do tego samego zdarzenia, co każde inne
poprzednie odniesienie do historii w tym wierszu poleceń; jeśli jest to jedyne odniesienie do historii w pliku a
polecenie, odnosi się do poprzedniego polecenia. Jeśli jednak opcja CSH_JUNKIE_HISTORY is
set, a następnie każde odwołanie do historii bez specyfikacji zdarzenia zawsze odnosi się do
poprzednie polecenie.
Na przykład `!' jest oznaczeniem zdarzenia poprzedniego polecenia, zatem `!!:1' zawsze odnosi się
do pierwszego słowa poprzedniego polecenia i `!!$' zawsze odnosi się do ostatniego słowa
poprzednie polecenie. Z CSH_JUNKIE_HISTORY ustaw, a następnie `!:1' i `!$'funkcjonują w ten sam sposób
sposób jak `!!:1' i `!!$', odpowiednio. I odwrotnie, jeśli CSH_JUNKIE_HISTORY jest rozbrojony,
następnie `!:1' i `!$odnoszą się odpowiednio do pierwszego i ostatniego słowa tego samego wydarzenia
do którego odwołuje się najbliższe inne odwołanie do historii poprzedzające je w bieżącym poleceniu
wierszu lub do poprzedniego polecenia, jeśli nie ma poprzedzającego odniesienia.
Sekwencja znaków `^bla^bar' (gdzie `^' jest właściwie drugim znakiem
histchary parametr) powtarza ostatnie polecenie, zastępując ciąg bla w bar. Więcej
dokładnie sekwencja `^bla^bar^' jest synonimem `!!:s^bla^bar^', stąd inne
modyfikatory (patrz sekcja „Modyfikatory”) mogą występować po końcowym `^'. W szczególności,
`^bla^barBibliografia' wykonuje podstawienie globalne.
Jeśli powłoka napotka sekwencję znaków `!"' na wejściu znajduje się mechanizm historii
tymczasowo wyłączone do czasu aktualnej listy (patrz zshmisc(1)) jest w pełni przeanalizowany. `!"' jest
usunięte z wejścia i wszelkie kolejne `!' znaki nie mają specjalnego znaczenia.
Mniej wygodną, ale bardziej zrozumiałą formę obsługi historii poleceń zapewnia
dotychczasowy fc wbudowany.
wydarzenie Desygnatory
Oznaczenie zdarzenia jest odniesieniem do wpisu wiersza poleceń na liście historii. w
listę poniżej, pamiętaj, że inicjał `!' w każdym elemencie można zmienić na inny znak
ustawiając histchary parametr.
! Rozpocznij rozwijanie historii, z wyjątkiem sytuacji, gdy następuje po niej pusty znak nowej linii, `=' lub `('.
Jeżeli bezpośrednio następuje oznaczenie słowa (patrz sekcja „Desygnatory słów”),
tworzy to odniesienie do historii bez oznaczeń zdarzeń (patrz sekcja
„Przegląd”).
!! Zapoznaj się z poprzednim poleceniem. To rozszerzenie samo w sobie powtarza poprzednie
dowództwo.
!n Zobacz wiersz poleceń n.
!-n Zapoznaj się z bieżącym minusem wiersza poleceń n.
!str Zapoznaj się z najnowszym poleceniem zaczynającym się od str.
!?str[?]
Zapoznaj się z najnowszym poleceniem zawierającym str. Końcowy `?' jest konieczne, jeśli
po tym odniesieniu należy umieścić modyfikator lub dowolny tekst, który nim nie jest
być uważanym za część str.
!# Odwołaj się do aktualnie wpisanego wiersza poleceń. Linia jest traktowana tak, jakby była
były kompletne aż do słowa poprzedzającego słowo z `!#' odniesienie.
!{...} Odizoluj odniesienia do historii od sąsiednich znaków (jeśli to konieczne).
słowo Desygnatory
Oznaczenie słowa wskazuje, które słowo lub słowa z danego wiersza poleceń mają zostać uwzględnione
w odnośniku do historii. `:' zwykle oddziela specyfikację zdarzenia od słowa
oznaczenie. Można go pominąć tylko wtedy, gdy desygnator słowa zaczyna się od `^', '$', '*',
`-' lub `%'. Oznaczenia słów obejmują:
0 Pierwsze słowo wejściowe (polecenie).
n nargument.
^ Pierwszy argument. To jest, 1.
$ Ostatni argument.
% Słowo dopasowane przez (najnowsze) ?str sprawdzić.
x-y Zakres słów; x domyślnie to 0.
* Wszystkie argumenty lub wartość null, jeśli ich nie ma.
x* Skrót `x-$'.
x- jak `x*', ale pomijam słowo $.
Zauważ, że `%' desygnator słowa działa tylko wtedy, gdy jest używany w jednym z `!%', '!:%' lub `!?str?:%',
i tylko wtedy, gdy jest używany po a !? rozwinięcie (prawdopodobnie we wcześniejszym poleceniu). Coś jeszcze
powoduje błąd, chociaż błąd ten może nie być najbardziej oczywisty.
modyfikatory
Po opcjonalnym oznaczeniu słowa możesz dodać sekwencję jednego lub więcej z poniższych
modyfikatory, każdy poprzedzony znakiem `:'. Te modyfikatory działają również na wynik filename
generacja oraz parametr ekspansja, chyba że zaznaczono inaczej.
a Zamień nazwę pliku na ścieżkę bezwzględną: dołącza bieżący katalog, jeśli
konieczne i rozwiązuje wszelkie przypadki użycia `..' i `.' na ścieżce. Należy pamiętać, że
transformacja ma miejsce, nawet jeśli plik lub jakiekolwiek pośrednie katalogi tego nie robią
istnieć.
A Jako `a', ale także, tam gdzie to możliwe, rozwiąż problem użycia dowiązań symbolicznych. Zauważ to
rozdzielczość `..' występuje zanim rozdzielczość dowiązań symbolicznych. To wezwanie jest
równoważny a chyba że twój system ma prawdziwa ścieżka wywołanie systemowe (nowoczesne systemy
robić).
c Rozwiąż nazwę polecenia na ścieżkę bezwzględną, przeszukując ścieżkę polecenia podaną przez
dotychczasowy PATH zmienny. Nie działa to w przypadku poleceń zawierających części katalogu.
Należy również zauważyć, że zwykle nie działa to jako kwalifikator glob, chyba że plik
ta sama nazwa zostanie znaleziona w bieżącym katalogu.
e Usuń wszystko oprócz części rozszerzenia nazwy pliku następującej po `.'; zobacz
definicja rozszerzenia pliku w opisie pliku r modyfikator poniżej.
Zauważ, że zgodnie z tą definicją wynik będzie pusty, jeśli ciąg się zakończy
z `.'.
h Usuń końcowy komponent nazwy ścieżki, pozostawiając nagłówek. To działa jak `dirname'.
l Zamień słowa na małe litery.
p Wydrukuj nowe polecenie, ale go nie wykonuj. Działa tylko z rozszerzeniem historii.
q Zacytuj zastąpione słowa, unikając dalszych podstawień. Pracuje z historią
rozszerzanie i rozszerzanie parametrów, chociaż w przypadku parametrów jest to przydatne tylko wtedy, gdy
wynikowy tekst ma zostać ponownie oceniony, np. przez eval.
Q Usuń jeden poziom cudzysłowów z zastąpionych słów.
r Usuń rozszerzenie nazwy pliku, pozostawiając nazwę główną. Ciągi znaków bez nazwy pliku
rozszerzenia nie ulegają zmianie. Rozszerzenie nazwy pliku to `.', po którym następuje dowolna liczba
znaków (łącznie z zerem), które nie są ani `.' ani '/' i to trwa do
koniec sznurka. Na przykład rozszerzenie `foo.orig.c' jest `.c', i
`reż.c/foo' nie ma rozszerzenia.
s/l/r[/]
namiastka r dla l Jak opisano poniżej. Podstawienie odbywa się tylko w przypadku pierwszego
pasujący ciąg l. Dotyczy to tablic i generowania nazw plików
każde słowo rozwiniętego tekstu. Poniżej znajdują się dalsze uwagi dotyczące substytucji.
Formularze `gs/l/r' i `s/l/r/:G' wykonaj globalną substytucję, czyli substytucję
każde wystąpienie r dla l. Zauważ, że g or :G musi pojawić się dokładnie w
pokazana pozycja.
Dalsze uwagi dotyczące tej formy podstawienia znajdują się poniżej.
& Powtórz poprzednie s podstawienie. Tak jak s, może być bezpośrednio poprzedzone przez a g.
W rozwinięciu parametrów & musi pojawić się w nawiasach klamrowych i podczas generowania nazwy pliku
należy go cytować z ukośnikiem odwrotnym.
t Usuń wszystkie wiodące komponenty ścieżki, pozostawiając ogon. To działa jak
`nazwa podstawowa'.
u Zamień słowa na wielkie litery.
x Jak q, ale podziel się na słowa w białych znakach. Nie działa z parametrem
ekspansja.
s/l/r/ podstawienie działa w następujący sposób. Domyślnie lewa strona podstawień
nie są wzorcami, ale ciągami znaków. Jako ogranicznik można zastosować dowolny znak
miejsce `/'. Ukośnik odwrotny cytuje znak ogranicznika. Postać `&', w
prawa strona r, zastępuje się tekstem z lewej strony l. `&' może być
cytowany z ukośnikiem odwrotnym. Wartość zerowa l używa poprzedniego ciągu albo z poprzedniego l or
z ciągu skanowania kontekstowego s od `!?s'. Możesz pominąć skrajny prawy ogranicznik, jeśli a
natychmiast następuje nowa linia r; najbardziej na prawo `?' w skanowaniu kontekstowym może być podobnie
pominięty. Zwróć uwagę na ten sam zapis ostatniego l oraz r jest utrzymywany we wszystkich formach
ekspansja.
Zauważ, że jeśli `&' jest używany w kwalifikatorach glob, potrzebny jest dodatkowy ukośnik odwrotny, ponieważ a & jest
znak specjalny w tym przypadku.
Należy również pamiętać, że kolejność rozwinięć wpływa na interpretację l oraz r. Kiedy jest używany
w rozszerzeniu historii, które ma miejsce przed jakimkolwiek innym rozwinięciem, l oraz r są traktowane jako
ciągi literałów (z wyjątkiem przypadków wyjaśnionych w HIST_SUBST_WZÓR poniżej). Kiedy używany w
rozszerzanie parametrów, zastępowanie r w wartość parametru jest wykonywana jako pierwsza, oraz
wówczas są to wszelkie dodatkowe odniesienia do procesów, parametrów, poleceń, arytmetyki lub nawiasów klamrowych
zastosowane, które mogą oceniać te podstawienia i rozszerzenia więcej niż raz, jeśli l pojawia się
więcej niż raz w wartości początkowej. W przypadku użycia w kwalifikatorze glob, wszelkie podstawienia lub
rozwinięcia są wykonywane raz w momencie analizowania kwalifikatora, nawet przed `:s'
samo wyrażenie jest podzielone na l oraz r stron.
Jeśli opcja HIST_SUBST_WZÓR jest ustawiony, l jest traktowany jako wzór o zwykłej formie
opisano w sekcji GENEROWANIE NAZW PLIKU poniżej. Można to wykorzystać we wszystkich miejscach
gdzie dostępne są modyfikatory; należy jednak pamiętać, że w przypadku kwalifikatorów globowania parametr
podstawienie już miało miejsce, więc parametry w ciągu zastępczym powinny być
podane w celu zapewnienia ich wymiany we właściwym czasie. Zauważ też, że to skomplikowane
wzorce używane w kwalifikatorach globowania mogą wymagać rozszerzonej notacji kwalifikatora globowania
(#q:s/.../.../) aby powłoka rozpoznała wyrażenie jako kwalifikator glob.
Ponadto należy pamiętać, że złe wzorce podstawień nie podlegają NIE_ZŁY_WZÓR
opcję, więc spowoduje to błąd.
Kiedy HIST_SUBST_WZÓR jest ustawiony, l może zaczynać się od a # aby wskazać, że wzór musi
dopasowanie na początku ciągu znaków, który ma zostać zastąpiony, oraz a % może pojawić się na początku lub
po # aby wskazać, że wzór musi pasować na końcu ciągu, aby był
podstawiony. The % or # można cytować z dwoma ukośnikami.
Na przykład następujący fragment kodu generowania nazwy pliku z rozszerzeniem EXTENDED_GLOB
opcja:
*.c(#q:s/#%(#b)s(*).c/'S${match[1]}.C'/)
zajmuje rozwinięcie *.C i stosuje kwalifikatory globalne w (#Q...) wyrażenie
który składa się z modyfikatora podstawienia zakotwiczonego na początku i na końcu każdego słowa (#%).
To włącza referencje wsteczne ((#B)), aby dostępne było podwyrażenie w nawiasach
w ciągu zastępczym jako ${dopasowanie[1]}. Ciąg zastępczy jest cytowany w taki sposób, że
parametr nie jest podstawiany przed rozpoczęciem generowania nazwy pliku.
Poniższy f, F, w oraz W modyfikatory działają tylko z rozwinięciem parametrów i nazwą pliku
Pokolenie. Wymieniono je tutaj, aby zapewnić wszystkim jeden punkt odniesienia
modyfikatory.
f Powtarza modyfikator bezpośrednio następujący (bez dwukropka) aż do wyniku
słowo już się nie zmienia.
F:expr:
Jak f, ale tylko się powtarza n razy, jeśli wyrażenie expr ocenia na n, Każdy
Zamiast `. można użyć znaku:'; jeśli `(', '[' lub `{' jest używany jako
ogranicznik otwierający, ogranicznik zamykający powinien mieć wartość „)', ']' lub `}', odpowiednio.
w Sprawia, że następujący po nim modyfikator działa na każde słowo w ciągu.
W:września: Jak w ale słowa są uważane za części ciągu oddzielone przez
września. Zamiast `. można użyć dowolnego znaku:'; obsługiwane są nawiasy otwierające
specjalnie, patrz wyżej.
PROCES PODSTAWIENIE
Każda część argumentu polecenia, która przyjmuje postać `<(podstęp)', '>(podstęp)' lub `=(podstęp)' jest
podlega substytucji procesowej. Wyrażenie może być poprzedzone lub następujące po innym
strings, z tą różnicą, że aby zapobiec konfliktom z powszechnie występującymi ciągami i wzorami, metoda
ostatnia forma musi wystąpić na początku argumentu polecenia, a formularze są jedynie rozwijane
podczas pierwszego analizowania argumentów polecenia lub przypisania. Można zastosować substytucje procesu
następujące operatory przekierowań; w tym przypadku podstawienie musi pojawić się z nr
ciąg końcowy.
W przypadku < or > form, powłoka uruchamia polecenia podstęp jako podproces
zadanie wykonujące wiersz poleceń powłoki. Jeśli system obsługuje /dev/fd mechanizm,
argumentem polecenia jest nazwa pliku urządzenia odpowiadająca deskryptorowi pliku;
w przeciwnym razie, jeśli system obsługuje potoki nazwane (FIFO), argumentem polecenia będzie a
nazwana rura. Jeśli formularz z > zostanie wybrana, umożliwi to zapis w tym specjalnym pliku
wejście dla podstęp. Jeśli < zostanie użyty, wówczas zostanie podłączony plik przekazany jako argument
wyjście z podstęp proces. Na przykład,
makaron <(cięcie -f1 file1) <(cięcie -f3 file2) |
trójnik >(proces1) >(proces2) > / dev / null
wycina pola 1 i 3 z plików file1 oraz file2 odpowiednio wkleja wyniki
razem i wysyła je do procesów proces1 oraz proces2.
If =(...) stosuje się zamiast <(...), wówczas plik przekazany jako argument będzie nazwą
pliku tymczasowego zawierającego dane wyjściowe programu podstęp proces. Można tego użyć zamiast tego
ukończenia < formularz dla programu, który oczekuje lszukania (patrz szukam(2)) w pliku wejściowym.
Istnieje optymalizacja podstawień formularza =(<<arg), Gdzie arg jest
argument jednowyrazowy do przekierowania tutaj-string <<. Ten formularz generuje nazwę pliku
zawierający wartość arg po dokonaniu jakichkolwiek podstawień. To jest załatwiane
całkowicie w bieżącej powłoce. Jest to w rzeczywistości odwrotność formy specjalnej
$(arg) który traktuje arg jako nazwę pliku i zastępuje ją zawartością pliku.
= forma jest przydatna zarówno jako /dev/fd i nazwana implementacja potoku <(...) mieć
wady. W pierwszym przypadku niektóre programy mogą automatycznie zamknąć plik
deskryptor, o którym mowa, przed sprawdzeniem pliku w wierszu poleceń, szczególnie jeśli to
jest konieczne ze względów bezpieczeństwa, np. gdy program działa z setuidem. w
drugi przypadek, jeśli program w rzeczywistości nie otwiera pliku, a podpowłoka próbuje to zrobić
odczyt lub zapis do potoku będzie (w typowej implementacji inny sposób działania
systemy mogą zachowywać się inaczej) blokują się na zawsze i muszą zostać jawnie zabite. W
w obu przypadkach powłoka faktycznie dostarcza informacje za pomocą potoku, dzięki czemu programy
które spodziewają się szukać (zob szukam(2)) w pliku nie będzie działać.
Należy również pamiętać, że poprzedni przykład można zapisać w bardziej zwięzły i wydajny sposób
(pod warunkiem WIELE opcja jest ustawiona) jako:
makaron <(cięcie -f1 file1) <(cięcie -f3 file2) \
> >(proces1) > >(proces2)
Powłoka używa potoków zamiast FIFO do implementacji dwóch ostatnich podstawień procesów
powyższy przykład.
Jest jeszcze dodatkowy problem >(wygląda tak); gdy jest on podłączony do urządzenia zewnętrznego
polecenie, na które powłoka nadrzędna nie czeka wygląda tak zakończyć, a zatem natychmiast
następujące polecenie nie może polegać na kompletności wyników. Problem i rozwiązanie są
tak samo, jak opisano w sekcji WIELE in zshmisc(1). Stąd w wersji uproszczonej
z powyższego przykładu:
makaron <(cięcie -f1 file1) <(cięcie -f3 file2) > >(wygląda tak)
(zauważ, że nie WIELE są zamieszani), wygląda tak będzie uruchamiany asynchronicznie aż do
Shell nadrzędny jest zaniepokojony. Rozwiązanie jest następujące:
{ makaron <(cięcie -f1 file1) <(cięcie -f3 file2) } > >(wygląda tak)
Dodatkowe procesy są tutaj uruchamiane z powłoki nadrzędnej, która będzie czekać na swoje
ukończenie.
Inny problem pojawia się za każdym razem, gdy zadanie wymaga zamiany wymagającej pliku tymczasowego
jest odrzucany przez powłokę, łącznie z przypadkiem, gdy `&!' lub `&|' pojawia się na końcu a
polecenie zawierające podstawienie. W takim przypadku plik tymczasowy nie zostanie wyczyszczony
ponieważ powłoka nie ma już pamięci o zadaniu. Rozwiązaniem jest użycie podpowłoki, np
przykład,
(mojecmd =(moje wyjście)) &!
ponieważ rozwidlona podpowłoka będzie czekać na zakończenie polecenia, a następnie usuń plik tymczasowy.
Ogólne obejście zapewniające trwałość substytucji procesu przez odpowiednią długość
czas polega na przekazaniu go jako parametru do anonimowej funkcji powłoki (fragmentu kodu powłoki
uruchamiany natychmiast z zakresem funkcji). Na przykład ten kod:
() {
filet $ 1:
jak $1
} =(drukuj Niniejsze be dotychczasowy werset)
generuje coś podobnego do poniższego
filet /tmp/zsh6nU0kS:
Niniejsze be dotychczasowy werset
Plik tymczasowy utworzony przez podstawienie procesu zostanie usunięty, gdy funkcja
wyjść.
PARAMETR EKSPANSJA
Postać `$' służy do wprowadzania rozwinięć parametrów. Widzieć zszparam(1) dla
opis parametrów, w tym tablice, tablice asocjacyjne i zapis w indeksie dolnym
dostęp do poszczególnych elementów tablicy.
Zwróć w szczególności uwagę na fakt, że słowa parametrów niecytowanych nie są automatycznie dzielone
na białych znakach, chyba że jest taka opcja SH_WORD_SPLIT jest ustawiony; zobacz odniesienia do tej opcji poniżej
po więcej szczegółów. Jest to istotna różnica w porównaniu z innymi powłokami.
W rozwinięciach omówionych poniżej, które wymagają wzorca, formą wzorca jest
taki sam, jak ten używany do generowania nazwy pliku; zobacz sekcję `Generowanie nazwy pliku'. Notatka
że te wzorce, wraz z tekstem zastępczym wszelkich podstawień, są sobą
podlega rozszerzaniu parametrów, podstawieniu poleceń i rozwinięciu arytmetycznym. W
oprócz następujących operacji, modyfikatory dwukropków opisane w tej sekcji
Można zastosować „Modyfikatory” w sekcji „Rozszerzenie historii”: na przykład:
${i:s/foo/bar] wykonuje podstawienie łańcucha po rozwinięciu parametru $i.
${Nazwa}
Wartość parametru, jeśli istnieje Nazwa jest podstawiony. Wymagane są szelki
jeśli po rozwinięciu ma nastąpić litera, cyfra lub podkreślenie, czego nie ma
interpretować jako część Nazwa. Ponadto bardziej skomplikowane formy
substytucja zwykle wymaga obecności nawiasów klamrowych; wyjątki, które mają zastosowanie
jeśli opcja KSH_ARRAYS nie jest ustawiony, są pojedynczym indeksem dolnym lub dowolnymi modyfikatorami dwukropka
występujący po nazwie lub którymkolwiek ze znaków `^', '=', '~', '#' lub `+'
pojawiające się przed nazwą, z których wszystkie działają z nawiasami klamrowymi lub bez nich.
If Nazwa jest parametrem tablicy, a KSH_ARRAYS opcja nie jest ustawiona, wówczas wartość
każdego elementu Nazwa jest podstawiony, jeden element na słowo. W przeciwnym razie
rozwinięcie skutkuje tylko jednym słowem; z KSH_ARRAYS, to jest pierwszy element
tablica. Wynik nie jest dzielony na pola, chyba że SH_WORD_SPLIT opcja
jest ustawiony. Zobacz także flagi = oraz s:ciąg:.
${+Nazwa}
If Nazwa jest nazwą ustawionego parametru `1' zostaje podstawione, w przeciwnym razie `0' jest
zastąpiony.
${Nazwa-słowo}
${Nazwa:-słowo}
If Nazwa jest ustawiony lub w drugiej postaci ma wartość różną od null, wówczas podstawia jego wartość;
w przeciwnym razie zastąpić słowo. W drugiej formie Nazwa w takim przypadku można pominąć
słowo jest zawsze podstawiony.
${Nazwa+słowo}
${Nazwa:+słowo}
If Nazwa jest ustawiony lub w drugiej formie ma wartość różną od null, wówczas podstaw słowo; Inaczej
niczego nie zastępować.
${Nazwa=słowo}
${Nazwa:=słowo}
${Nazwa::=słowo}
W pierwszej formie, jeśli Nazwa jest rozbrojony, następnie ustaw go na słowo; w drugiej formie, jeśli
Nazwa jest rozbrojony lub ma wartość null, a następnie ustaw go na słowo; a w trzeciej formie bezwarunkowo
zestaw Nazwa do słowo. We wszystkich postaciach następnie podstawiana jest wartość parametru.
${Nazwa?słowo}
${Nazwa:?słowo}
W pierwszej formie, jeśli Nazwa jest ustawione lub w drugiej formie if Nazwa jest zarówno ustawione, jak i
różna od null, następnie podstaw jej wartość; w przeciwnym razie wydrukuj słowo i wyjście ze skorupy.
Zamiast tego powłoki interaktywne powracają do monitu. Jeśli słowo zostaje pominięty, to a
drukowany jest standardowy komunikat.
W którymkolwiek z powyższych wyrażeń testuje się zmienną i zastępuje ją alternatywą słowo,
zauważ, że możesz użyć standardowego cytowania powłoki w pliku słowo wartość, aby selektywnie zastąpić
podział dokonany przez SH_WORD_SPLIT opcja i = flagę, ale nie dzieloną przez
s:ciąg: flag.
W poniższych wyrażeniach, kiedy Nazwa jest tablicą, a podstawienie nie jest cytowane, lub
jeśli `(@)flaga lub Nazwa[@] używana jest składnia, przeprowadzane jest dopasowywanie i zastępowanie
każdy element tablicy osobno.
${Nazwa#wzorzec}
${Nazwa##wzorzec}
Jeśli wzorzec dopasowuje początek wartości Nazwa, następnie zamień
wartość Nazwa z usuniętą dopasowaną częścią; w przeciwnym razie po prostu zamień
wartość Nazwa. W pierwszej formie preferowany jest najmniejszy wzór dopasowania; W
w drugiej formie preferowany jest największy wzór dopasowania.
${Nazwa%wzorzec}
${Nazwa%%wzorzec}
Jeśli wzorzec dopasowuje koniec wartości Nazwa, a następnie zamień wartość
Nazwa z usuniętą dopasowaną częścią; w przeciwnym razie po prostu zamień wartość
Nazwa. W pierwszej formie preferowany jest najmniejszy wzór dopasowania; w sekundę
preferowany jest największy pasujący wzór.
${Nazwa:#wzorzec}
Jeśli wzorzec odpowiada wartości Nazwa, następnie zamień pusty ciąg;
w przeciwnym razie po prostu zamień wartość Nazwa. Jeśli Nazwa jest tablicą pasującą
elementy tablicy są usuwane (użyj `(M)', aby usunąć niedopasowane elementy).
${Nazwa:|nazwa tablicy}
If nazwa tablicy to nazwa (NB, nie zawartość) zmiennej tablicowej, a następnie dowolna
elementy zawarte w nazwa tablicy są usuwane z podstawienia Nazwa, Jeśli
podstawienie jest skalarne, ponieważ Nazwa jest zmienną skalarną lub wyrażeniem
jest cytowany, elementy nazwa tablicy zamiast tego są testowane w odniesieniu do całości
wyrażenie.
${Nazwa:*nazwa tablicy}
Podobnie jak w przypadku poprzedniego podstawienia, ale w odwrotnym sensie, tak że wpisy
obecny zarówno w pierwotnym podstawieniu, jak i jako elementy nazwa tablicy są zachowane
i inne usunięte.
${Nazwa:^nazwa tablicy}
${Nazwa:^^nazwa tablicy}
Spakuje dwie tablice w taki sposób, że tablica wyjściowa jest dwa razy dłuższa od najkrótszej
(najdłuższy dla `:^^') z Nazwa oraz nazwa tablicy, przy czym elementy są naprzemiennie
wybrane z nich. Dla `:^', jeśli jedna z tablic wejściowych jest dłuższa, dane wyjściowe będą
zatrzymaj się po osiągnięciu końca krótszej tablicy. Zatem,
a=(1 2 3 4); b=(a B); ${a:^b}
wyświetli `1 a 2 b'. Dla `:^^', następnie wprowadzanie jest powtarzane, aż wszystkie
dłuższa tablica została wykorzystana i powyższe wyświetli `1 a 2 b 3 a 4 b'.
Jedno lub oba wejścia mogą być skalarami, będą traktowane jako tablica o długości 1
ze skalarem jako jedynym elementem. Jeśli którakolwiek tablica jest pusta, druga tablica jest pusta
wyjście bez wstawionych dodatkowych elementów.
Obecnie następujący kod wyświetli `a b' i `1„jako dwa oddzielne elementy,
co może być nieoczekiwane. Drugi wydruk zapewnia obejście, które powinno
kontynuować pracę, jeśli to się zmieni.
a=(a B); b=(1 2); -l "${a:^b}"; -l „${${a:^b}}”
${Nazwa:offset}
${Nazwa:offset:długość}
Ta składnia daje efekty podobne do indeksowania parametrów w formularzu
$Nazwa[początek,zakończenia], ale jest kompatybilny z innymi powłokami; zauważ, że oba offset oraz
długość są interpretowane inaczej niż składniki indeksu dolnego.
If offset jest nieujemna, to jeśli zmienna Nazwa jest skalarnym substytutem
początek treści offset znaków od pierwszego znaku ciągu i if
Nazwa jest tablicą rozpoczynającą elementy zastępcze offset elementy z pierwszego
element. Jeśli długość podano, zamień tyle znaków lub elementów,
w przeciwnym razie cała reszta skalara lub tablicy.
Pozytywny offset jest zawsze traktowany jako przesunięcie znaku lub elementu Nazwa
od pierwszego znaku lub elementu tablicy (różni się to od natywnego zsh
zapis w indeksie dolnym). Zatem 0 odnosi się niezależnie do pierwszego znaku lub elementu
od ustawienia opcji KSH_ARRAYS.
Ujemne przesunięcie liczy się wstecz od końca skalara lub tablicy, więc -1
odpowiada ostatniemu znakowi lub elementowi i tak dalej.
Kiedy jest pozytywny, długość liczy się od offset położenie w kierunku końca skalara
lub tablica. Kiedy jest negatywny, długość liczy od końca. Jeżeli skutkuje to a
pozycja mniejsza niż offset, drukowany jest komunikat diagnostyczny i nic nie jest zastępowane.
Opcja MULTIBAJT jest przestrzegane, tj. przesunięcie i liczba wielobajtowa
tam, gdzie to konieczne, znaki.
offset oraz długość podlegają temu samemu zestawowi podstawień powłoki, co skalar
zadanie; dodatkowo poddawane są następnie ocenie arytmetycznej. Stąd,
na przykład
${foo:3}
${foo: 1 + 2}
${foo:$(( 1 + 2))}
${foo:$(echo 1 + 2)}
wszystkie mają ten sam efekt, wyodrębniając ciąg znaków zaczynający się od czwartego znaku
$ foo jeśli podstawienie w przeciwnym razie zwróciłoby skalar lub tablicę zaczynającą się od
czwarty element jeśli $ foo zwróci tablicę. Pamiętaj, że z opcją
KSH_ARRAYS $ foo zawsze zwraca skalar (niezależnie od użycia przesunięcia
składnia) i formę taką jak $foo[*]:3 jest wymagany do wyodrębnienia elementów tablicy
o imieniu bla.
If offset jest ujemny, - może nie pojawić się bezpośrednio po : jak to
wskazuje ${Nazwa:-słowo} forma substytucji. Zamiast tego można wstawić spację
przed -. Co więcej, żadne offset ani długość może zaczynać się od litery
znak lub & ponieważ są one używane do wskazania modyfikatorów stylu historii. Do
zastąpić wartość ze zmiennej, zalecanym podejściem jest poprzedzenie jej
a $ ponieważ oznacza to intencję (można łatwo dokonać podstawienia parametrów
nieczytelny); jednakże w miarę wykonywania podstawienia arytmetycznego wyrażenie
${zmienna: offs} działa, pobierając przesunięcie z $ zniżki.
Dla dalszej kompatybilności z innymi powłokami istnieje specjalny przypadek dla tablicy
offset 0. Zwykle uzyskuje się dostęp do pierwszego elementu tablicy. Jeśli jednak
podstawienie odnosi się do tablicy parametrów pozycyjnych, np $@ or $*, a następnie przesunięcie
Zamiast tego 0 odnosi się do $0, do którego odnosi się przesunięcie 1 $1, i tak dalej. Inaczej mówiąc,
tablica parametrów pozycyjnych jest efektywnie rozszerzana poprzez dodawanie $0. Stąd
${*:0:1} zamienniki $0 oraz ${*:1:1} zamienniki $1.
${Nazwa/wzorzec/zastępstwo}
${Nazwa//wzorzec/zastępstwo}
Zamień najdłuższe możliwe dopasowanie wzorzec w rozwinięciu parametru Nazwa by
ciąg zastępstwo. Pierwsza forma zastępuje tylko pierwsze wystąpienie, druga forma
wszystkie zdarzenia. Obydwa wzorzec oraz zastępstwo podlegają podstawieniu w cudzysłowie,
więc wyrażenia typu ${imię/$opat/$npat} będzie działać, ale pamiętaj o zwykłej zasadzie
ten wzór znaków $opat nie są traktowane specjalnie, chyba że istnieje taka możliwość
GLOB_SUBST jest ustawiony, lub $opat jest zamiast tego podstawiony jako ${~opata}.
wzorzec może zaczynać się od `#', w takim przypadku wzorzec musi pasować na początku
ciągu lub `%', w takim przypadku musi pasować na końcu ciągu, lub
`#%' w takim przypadku wzorzec musi pasować do całego ciągu. The zastępstwo może być
pusty ciąg znaków, w tym przypadku końcowy `/' można również pominąć. Cytując finał
`/' w pozostałych przypadkach powinno być poprzedzone pojedynczym ukośnikiem odwrotnym; to nie jest
konieczne, jeśli `/' występuje wewnątrz podstawionego parametru. Należy również pamiętać, że
`#', '%' i `#% nie są aktywne, nawet jeśli występują wewnątrz podstawionego parametru
Na początku.
Pierwszy `/' może być poprzedzone `:', w takim przypadku mecz zakończy się sukcesem
jeśli pasuje do całego słowa. Zwróć także uwagę na efekt I oraz S parametr
flagi rozwinięcia poniżej; jednak flagi M, R, B, E oraz N nie są przydatne.
Na przykład,
foo="migotanie pełganie mało gwiazda" sub="t*e" przedstawiciel="szpieg"
${foo//${~sub}/$rep}
${(S)foo//${~sub}/$rep}
Tutaj `~' zapewnia, że tekst $sub jest traktowany jako wzór, a nie jako
zwykły sznurek. W pierwszym przypadku najdłuższy mecz dla t*e jest podstawiony i
wynik to `szpieg gwiazda', podczas gdy w drugim przypadku brane są pod uwagę najkrótsze mecze i
wynik to `szpieg szpieg sepleni gwiazda'.
${#specyfikacja}
If specyfikacja jest jednym z powyższych podstawień, należy zastąpić długość w znakach
wynik, a nie sam wynik. Jeśli specyfikacja jest wyrażeniem tablicowym,
podstaw liczbę elementów wyniku. Ma to taki skutek uboczny
łączenie jest pomijane nawet w formularzach cytowanych, co może mieć wpływ na inne wyrażenia podrzędne w
specyfikacja. Zauważ, że `^', '=' i `~' poniżej musi pojawić się na lewo od `#' Kiedy
formy te są łączone.
Jeśli opcja POSIX_IDENTYFIKATORY nie jest ustawiony, oraz specyfikacja jest prostą nazwą, to
szelki są opcjonalne; dotyczy to nawet parametrów specjalnych, np $#- oraz $#*
weź długość sznurka $- i tablica $* odpowiednio. Gdyby
POSIX_IDENTYFIKATORY jest ustawiony, wówczas wymagane są nawiasy klamrowe # się w tym leczyć
moda.
${^specyfikacja}
Włącz RC_EXPAND_PARAM możliwość oceny specyfikacja; jeśli `^' jest
podwoiła się, wyłącz ją. Gdy ta opcja jest ustawiona, rozwinięcia tablicowe formularza
bla${xx}bar, gdzie parametr xx jest ustawione na (a b c), są zastępowane przez
`fooabar foobbar foocbar' zamiast domyślnego `głupota b cbar'. Zauważ, że pusty
array spowoduje zatem usunięcie wszystkich argumentów.
Wewnętrznie każde takie rozwinięcie jest konwertowane na równoważną listę nawiasów klamrowych
ekspansja. Np, ${^zmienna} staje się {$zmienna[1],$zmienna[2],...}i jest przetwarzany jako
opisano w sekcji „Rozbudowa naciągu” poniżej. Jeśli dzielenie słów jest również włączone
wpływać na $zmienna[N] mogą same zostać podzielone na różne elementy listy.
${=specyfikacja}
Wykonaj dzielenie słów, korzystając z reguł dla SH_WORD_SPLIT podczas oceny
specyfikacja, ale niezależnie od tego, czy parametr występuje w cudzysłowie; jeśli `='
zostanie podwojona, wyłącz ją. Wymusza to podział rozwinięć parametrów
oddziel słowa przed podstawieniem, używając IFS jako ogranicznik. Dokonuje się tego poprzez
domyślnie w większości innych powłok.
Należy pamiętać, że podział jest stosowany do słowo w formularzach zadań specyfikacja zanim dotychczasowy
przydział do Nazwa jest wykonywane. Ma to wpływ na wynik przypisań tablic za pomocą
dotychczasowy A flag.
${~specyfikacja}
Włącz GLOB_SUBST możliwość oceny specyfikacja; jeśli `~' jest podwojone,
Wyłącz to. Gdy ta opcja jest ustawiona, ciąg powstały w wyniku rozwinięcia będzie
być interpretowane jako wzorzec w dowolnym miejscu, w którym jest to możliwe, na przykład w nazwie pliku
rozwijanie i generowanie nazw plików oraz konteksty dopasowywania wzorców, takie jak prawa ręka
stronie `=' i `!=operatorzy w warunkach.
W przypadku podstawień zagnieżdżonych należy zauważyć, że efekt ~ dotyczy wyniku
obecny poziom substytucji. Operacja otaczającego wzorca na wyniku może
Odwołaj to. Stąd na przykład, jeśli parametr bla jest ustawione na *, ${~foo//\*/*.c}
zostaje zastąpiony wzorem *.C, który można rozszerzyć poprzez generowanie nazwy pliku,
ale ${${~foo}//\*/*.c} zastępuje ciąg *.C, o którym nie będzie dalej
rozszerzony.
Jeśli ${...} wpisz wyrażenie parametru lub a $(...) Podstawianie poleceń typu jest używane w
miejsce Nazwa powyżej, jest on najpierw rozwijany, a wynik jest używany tak, jakby był wartością
of Nazwa. W ten sposób możliwe jest wykonywanie operacji zagnieżdżonych: ${${foo#head}%tail}
zastępuje wartość $ foo z obydwoma `głowa' i `ogon' usunięto. Formularz z $(...)
jest często przydatny w połączeniu z flagami opisanymi poniżej; zobacz przykłady poniżej.
Każdy Nazwa lub zagnieżdżone ${...} w rozwinięciu parametrów może również następować indeks dolny
wyrażenie zgodnie z opisem w Szyk Parametry in zszparam(1).
Należy pamiętać, że wokół wyrażeń zagnieżdżonych mogą pojawić się cudzysłowy – w takim przypadku tylko część
wnętrze traktowane jest jak podane; Na przykład, ${(f)"$(foo)"} cytuje wynik $(foo), ale
flaga `(fa)' (patrz poniżej) stosuje się zgodnie z zasadami dotyczącymi rozwinięć niecytowanych. Notatka
ponadto cytaty same w sobie są zagnieżdżone w tym kontekście; na przykład w
"${(@f)"$(foo)"}", istnieją dwa zestawy cudzysłowów, jeden otaczający całe wyrażenie, the
inne (zbędne) otaczające $(foo) jak wcześniej.
Parametr Ekspansja Flagi
Jeżeli bezpośrednio po nawiasie otwierającym następuje nawias otwierający, ciąg znaków aż do
pasujący nawias zamykający zostanie potraktowany jako lista flag. W przypadku powtarzania a
flaga ma znaczenie, powtórzenia nie muszą następować po sobie; na przykład `(q%q%q)' oznacza
to samo co bardziej czytelne `(%%qqq)”. Obsługiwane są następujące flagi:
# Oceń powstałe słowa jako wyrażenia numeryczne i wypisz znaki
odpowiadająca wynikowej liczbie całkowitej. Należy pamiętać, że ta forma jest całkowicie odrębna
od korzystania z # bez nawiasów.
Jeśli MULTIBAJT opcja jest ustawiona, a liczba jest większa niż 127 (tj
znak ASCII) jest on traktowany jako znak Unicode.
% Rozwiń wszystkie % ucieka w powstałych słowach w taki sam sposób, jak w podpowiedziach (patrz
ROZSZERZENIE SEKWENCJI PODSUMOWANYCH w zshmisc(1)). Jeśli ta flaga zostanie podana dwukrotnie, pełna
szybkie rozwinięcie wynikowych słów odbywa się w zależności od ustawienia opcji
PROMPT_PERCENT, PROMPT_SUBST oraz PROMPT_BANG opcje.
@ W cudzysłowie elementy tablicy są umieszczane w oddzielnych słowach. Np. `„${(@)foo}”'
jest równoważne `„${foo[@]}”' i `„${(@)foo[1,2]}”' jest tym samym co `"$foo[1]"
"$foo[2]"'. To różni się od pole rozsadzający w ułamku sekundy przez f, s or z flagi, które
nadal ma zastosowanie w każdym elemencie tablicy.
A Utwórz parametr tablicowy za pomocą `${...=...}', '${...:=...}' lub `${...::=...}„. Gdyby
ta flaga jest powtarzana (jak w `AA'), utwórz parametr tablicy asocjacyjnej.
Przypisanie następuje przed sortowaniem lub dopełnianiem; jeśli podział pola jest aktywny, plik
słowo część jest dzielona przed przypisaniem. The Nazwa część może być zakresem indeksowanym dla
zwykłe tablice; the słowo część musi zostać przekonwertowany na tablicę, na przykład za pomocą
`${(AA)=Nazwa=...}', aby aktywować dzielenie pola podczas tworzenia tablicy asocjacyjnej.
a Sortuj w kolejności indeksów tablicy; w połączeniu z `O' sortuj w odwrotnym indeksie tablicy
zamówienie. Zauważ, że `a' jest zatem równoważne domyślnemu ale `Oa' jest przydatny
uzyskanie elementów tablicy w odwrotnej kolejności.
b Cytuj z ukośnikami odwrotnymi tylko znaki, które są specjalne dla dopasowywania wzorców. Ten
jest przydatny, gdy zawartość zmiennej ma być testowana za pomocą GLOB_SUBST,
w tym ${~...} przełącznik.
Cytując za pomocą jednego z q rodzina flag nie działa w tym celu, ponieważ
cudzysłowy nie są usuwane ze znaków innych niż wzorce przez GLOB_SUBST. Innymi słowy,
wzór=${(q)str}
[[ $str = ${~wzorzec} ]]
działa, jeśli $str jest `a * b', ale nie, jeśli jest to 'a b', mając na uwadze, że
wzór=${(b)str}
[[ $str = ${~wzorzec} ]]
jest zawsze prawdziwe dla dowolnej możliwej wartości $str.
c Wraz z ${#Nazwa}, policz całkowitą liczbę znaków w tablicy, tak jak gdyby elementy
zostały połączone ze spacjami pomiędzy nimi. To nie jest prawdziwe połączenie tablicy,
więc inne wyrażenia użyte z tą flagą mogą mieć wpływ na elementy klasy
tablica przed jej zliczeniem.
C Zapisz powstałe słowa wielką literą. „Słowa” w tym przypadku odnoszą się do sekwencji
znaki alfanumeryczne oddzielone znakami innymi niż alfanumeryczne, nie do słów, które wynikają
z podziału pola.
D Załóżmy, że elementy ciągu lub tablicy zawierają katalogi i spróbuj je zastąpić
wiodąca część z nich według nazw. Pozostała część ścieżki (cała jeśli
część wiodąca nie została podstawiona) jest następnie cytowana, tak aby cały ciąg mógł
być używany jako argument powłoki. To jest odwrotność `~' podstawienie: zob
sekcja ROZSZERZENIE NAZWY PLIKU poniżej.
e wykonać parametr ekspansja, komenda podstawienie oraz arytmetyka ekspansja na
wynik. Takie rozwinięcia można zagnieżdżać, ale zbyt głęboka rekurencja może być nieprzewidywalna
efekty.
f Podziel wynik rozwinięcia w miejscu znaków nowej linii. To jest skrót od `ps:\n:'.
F Połącz słowa tablic, używając nowej linii jako separatora. To jest
skrót dla `pj:\n:'.
g:optuje:
Przetwarzaj sekwencje specjalne, takie jak wbudowane echo, gdy nie podano żadnych opcji (G::).
Z o opcja, ósemkowe znaki specjalne nie przyjmują zera wiodącego. Z c opcja,
sekwencje takie jak `^Xsą również przetwarzane. Z e opcja, procesy `\Mt' oraz
podobne sekwencje, jak wbudowane print. Z obydwoma o oraz e Opcje
zachowuje się jak wbudowana funkcja print, z tą różnicą, że w żadnym z tych trybów nie występuje `\c'
interpretowane.
i Sortuj bez uwzględniania wielkości liter. Można łączyć z `n' lub `O'.
k If Nazwa odnosi się do tablicy asocjacyjnej, należy zastąpić Klawisze (nazwy elementów).
niż wartości elementów. Używane z indeksami dolnymi (w tym zwykłymi tablicami),
wymuś zastąpienie indeksów lub kluczy, nawet jeśli odnosi się do tego forma indeksu dolnego
wartości. Jednakże flaga ta nie może być łączona z zakresami indeksu dolnego.
L Zamień wszystkie litery w wyniku na małe.
n Sortuj dziesiętne liczby całkowite numerycznie; jeśli pierwsze różne znaki dwóch testują
ciągi znaków nie są cyframi, sortowanie jest leksykalne. Liczby całkowite z większą liczbą zer początkowych to
posortowane przed tymi, które mają mniej lub nie mają ich wcale. Stąd tablica `głupku głupku głupku głupku
głupku głupku' jest posortowane w pokazanej kolejności. Można łączyć z `i' lub `O'.
o Posortuj powstałe słowa w kolejności rosnącej; jeśli pojawia się to samo, sortowanie
jest leksykalny i uwzględnia wielkość liter (chyba że ustawienia regionalne uniemożliwiają rozróżnianie wielkości liter).
Sortowanie w kolejności rosnącej jest ustawieniem domyślnym w przypadku innych form sortowania, więc tak jest
ignorowane w połączeniu z `a', 'i' lub `n'.
O Posortuj powstałe słowa w kolejności malejącej; `O'bez'a', 'i' lub `n' sortuje się
odwrotny porządek leksykalny. Można łączyć z `a', 'i' lub `n', aby odwrócić kolejność
sortowania.
P Wymusza to wartość parametru Nazwa należy interpretować jako dalszy
nazwa parametru, którego wartość zostanie użyta tam, gdzie to konieczne. Pamiętaj, że flagi są ustawione
z jednym z skład rodziną poleceń (w szczególności transformacji) są
nie dotyczy wartości Nazwa używane w ten sposób.
Jeśli zostanie użyte z zagnieżdżonym parametrem lub podstawieniem polecenia, wynikiem będzie
traktowane jako nazwa parametru w ten sam sposób. Na przykład, jeśli masz `foo=bar' oraz
`słupek=baz', sznurki ${(P)foo}, ${(P)${foo}}, ${(P)$(echo bar)} będzie
rozwinięty do `baz'.
q Cytuj znaki specjalne dla powłoki w powstałych słowach za pomocą
ukośniki odwrotne; znaki niedrukowalne lub nieprawidłowe są cytowane przy użyciu $'\Nnn' Formularz,
z oddzielnymi cudzysłowami dla każdego oktetu.
Jeśli ta flaga zostanie podana dwukrotnie, powstałe słowa zostaną podane w pojedynczych cudzysłowach i if
podano je trzykrotnie, słowa ujęto w podwójny cudzysłów; w tych formach nie
podjęto próbę specjalnego postępowania ze znakami niedrukowalnymi lub nieprawidłowymi. Jeśli flaga jest
podane czterokrotnie, słowa cytowane są w pojedynczych cudzysłowach poprzedzonych literą a $, Należy pamiętać, że
we wszystkich trzech formach cytowanie odbywa się bezwarunkowo, nawet jeśli tak nie jest
zmienić sposób, w jaki wynikowy ciąg znaków będzie interpretowany przez powłokę.
Jeśli q- jest podany (tylko pojedynczy q może się pojawić), minimalną formą pojedynczego cytowania jest
używany, który cytuje ciąg tylko wtedy, gdy jest to konieczne do ochrony znaków specjalnych.
Zazwyczaj ta forma daje najbardziej czytelne dane wyjściowe.
Q Usuń jeden poziom cudzysłowów z powstałych słów.
t Użyj ciągu opisującego typ parametru, w którym znajduje się wartość parametru
zwykle się pojawiał. Ten ciąg składa się ze słów kluczowych oddzielonych łącznikami (`-”).
Pierwsze słowo kluczowe w ciągu opisuje typ główny, może to być jedno z `skalarny',
`szyk', 'liczba całkowita', 'unosić się' lub `stowarzyszenie'. Pozostałe słowa kluczowe opisują typ
bardziej szczegółowo:
miejscowy dla parametrów lokalnych
lewo dla parametrów wyrównanych do lewej
prawe_puste miejsca
dla parametrów wyrównanych do prawej z wiodącymi spacjami
prawe_zera
dla parametrów wyrównanych do prawej z zerami wiodącymi
niższy dla parametrów, których wartość jest konwertowana na małe litery, jeśli tak jest
rozszerzony
górny dla parametrów, których wartość jest konwertowana na wielkie litery, jeśli tak jest
rozszerzony
tylko czytać
dla parametrów tylko do odczytu
etykieta dla oznaczonych parametrów
eksport dla eksportowanych parametrów
wyjątkowy dla tablic, które przechowują tylko pierwsze wystąpienie zduplikowanych wartości
ukryć dla parametrów z flagą „ukryj”.
ukrywanie się
dla parametrów z flagą `hideval'
specjalny
dla specjalnych parametrów zdefiniowanych przez powłokę
u Rozwiń tylko pierwsze wystąpienie każdego unikalnego słowa.
U Zamień wszystkie litery w wyniku na wielkie.
v Używany z k, zamień (jako dwa kolejne słowa) zarówno klucz, jak i wartość
każdy element tablicy asocjacyjnej. Używane z indeksami dolnymi, wymusza zachowanie wartości
podstawiony, nawet jeśli forma indeksu dolnego odnosi się do indeksów lub kluczy.
V Ustaw widoczne znaki specjalne w powstałych słowach.
w Wraz z ${#Nazwa}, policz słowa w tablicach lub ciągach znaków; the s flaga może zostać użyta do ustawienia a
ogranicznik słów.
W Podobny do w z tą różnicą, że pomiędzy powtarzającymi się ogranicznikami są puste słowa
również liczone.
X Dzięki tej fladze błędy analizy występujące w pliku Q, e oraz # flagi lub wzór
pasujące formularze, takie jak `${Nazwa#wzorzec}' Jest zgłoszony. Bez flagi błędy
są po cichu ignorowane.
z Podziel wynik rozwinięcia na słowa, korzystając z analizy powłoki w celu znalezienia słów,
tj. biorąc pod uwagę wszelkie cytowania wartości. Komentarze nie są traktowane
specjalnie, ale jako zwykłe ciągi znaków, podobne do interaktywnych powłok z
INTERAKTYWNE_KOMENTARZE opcja nieustawiona (jednak zobacz Z flaga poniżej dla powiązanych
opcje)
Należy pamiętać, że robi się to bardzo późno, nawet później niż plik `(S)' flaga. A więc dostęp
pojedyncze słowa w wyniku używają zagnieżdżonych rozszerzeń, jak w `${${(z)foo}[2]}'. Podobnie,
aby usunąć cudzysłowy z powstałych słów, użyj `${(Q)${(z)foo}}'.
0 Podziel wynik rozwinięcia na bajty zerowe. To jest skrót od `ps:\0:'.
Następujące flagi (z wyjątkiem p) następuje jeden lub więcej argumentów, jak pokazano. Każdy
znak lub pasujące pary `(...)', '{...}', '[...]' lub `<...>', może być używany w
miejsce dwukropka jako ograniczników, ale zwróć uwagę, że gdy flaga przyjmuje więcej niż jeden argument, a
dopasowana para ograniczników musi otaczać każdy argument.
p Rozpoznaje te same sekwencje ucieczki, co wbudowane argumenty łańcuchowe do any
flag opisanych poniżej, które występują po tym argumencie.
Alternatywnie, przy tej opcji argumenty łańcuchowe mogą mieć postać $było w którym
w przypadku podstawienia wartości zmiennej. Należy pamiętać, że ten formularz jest rygorystyczny; the
argument string nie podlega ogólnemu rozwinięciu parametrów.
Na przykład,
wrzesień=:
wartość=a:b:c
${(ps.$sep.)val}
dzieli zmienną na a :.
~ Ciągi wstawione do rozwinięcia przez którąkolwiek z poniższych flag należy traktować jako
wzory. Dotyczy to argumentów łańcuchowych flag, które następują po nich ~ w ciągu
ten sam zestaw nawiasów. Porównać z ~ nawiasy zewnętrzne, co wymusza
cały podstawiony ciąg znaków należy traktować jako wzór. Stąd np.
[[ „?” = ${(~j.|.)tablica} ]]
traktuje `|' jako wzór i zakończy się sukcesem wtedy i tylko wtedy $tablica zawiera ciąg `?'
jako element. The ~ można powtórzyć, aby zmienić zachowanie; tylko jego skutek
trwa do końca grupy w nawiasach.
j:ciąg:
Połącz słowa tablic za pomocą ciąg jako separator. Zauważ, że to
występuje przed podziałem pola przez s:ciąg: flaga lub SH_WORD_SPLIT opcja.
l:expr::string1::string2:
Dopisz powstałe słowa po lewej stronie. Każde słowo zostanie w razie potrzeby obcięte i
umieszczony w polu expr szerokości znaków.
Argumenty :string1: oraz :string2: są opcjonalne; ani jedno, ani drugie może
zostało dane. Należy pamiętać, że dla każdego z nich należy zastosować te same pary ograniczników
trzy argumenty. Przestrzeń po lewej stronie zostanie wypełniona string1 (połączone
tak często, jak potrzeba) lub spacje, jeśli string1 nie jest dane. Jeśli oba string1 oraz string2
są podane, string2 jest wstawiany raz bezpośrednio po lewej stronie każdego słowa, obcinany, jeśli
konieczne, wcześniej string1 służy do wytworzenia pozostałego wypełnienia.
Jeśli któryś z string1 or string2 jest obecny, ale pusty, tj. istnieją dwa ograniczniki
razem w tym momencie, pierwszy znak $IFS jest używany zamiast tego.
Jeśli MULTIBAJT opcja jest aktywna, flaga m w takim przypadku można również podać
szerokości zostaną użyte do obliczenia wypełnienia; w przeciwnym razie pojedynczy wielobajt
znaki są traktowane jako zajmujące jedną jednostkę szerokości.
Jeśli MULTIBAJT opcja nie obowiązuje, każdy bajt w ciągu jest traktowany jako
zajmujący jedną jednostkę szerokości.
Zakłada się, że znaki sterujące mają zawsze szerokość jednej jednostki; pozwala to
mechanizm służący do generowania powtórzeń znaków kontrolnych.
m Przydatne tylko w połączeniu z jedną z flag l or r lub z # operator długości
kiedy MULTIBAJT opcja jest aktywna. Użyj szerokości znaku zgłoszonej przez
system obliczania zajmowanej przez niego części sznurka lub jego całkowitej długości
sznurek. Większość znaków drukowalnych ma szerokość jednej jednostki, choć jest to pewne
Azjatyckie zestawy znaków i niektóre efekty specjalne wykorzystują szersze znaki; łączenie
znaki mają zerową szerokość. Znaki niedrukowalne są liczone arbitralnie jako
szerokość zerowa; sposób ich faktycznego wyświetlania będzie się różnić.
Jeśli m zostanie powtórzony, znak albo liczy się zero (jeśli ma zerową szerokość), w przeciwnym razie
jeden. W przypadku ciągów znaków, które można wydrukować, skutkuje to zliczeniem liczby
glify (widocznie oddzielne znaki), z wyjątkiem przypadku łączenia
same znaki mają niezerową szerokość (prawda w niektórych alfabetach).
r:expr::string1::string2:
As l, ale uzupełnij słowa po prawej stronie i wstaw string2 zaraz po prawej stronie
ciąg, który ma zostać dopełniony.
Lewa i prawa wyściółka mogą być używane razem. W tym przypadku strategia polega na zastosowaniu
lewe dopełnienie do pierwszej połowy szerokości każdego z wynikowych słów i w prawo
uzupełnienie drugiej połowy. Jeśli ciąg do dopełnienia ma nieparzystą szerokość, należy dodać dodatkowy
wyściółka jest stosowana po lewej stronie.
s:ciąg:
Rozszczepienie pola siłowego w separatorze ciąg. Zauważ, że ciąg dwóch lub więcej
znaki oznaczają, że wszystkie muszą pasować po kolei; to różni się od
traktowanie dwóch lub więcej znaków w IFS parametr. Zobacz także = flaga i
dotychczasowy SH_WORD_SPLIT opcja. Można również podać pusty ciąg znaków, w takim przypadku Every
znak będzie osobnym elementem.
Ze względów historycznych typowe zachowanie polega na zachowywaniu pustych elementów tablicy
wewnątrz podwójnych cudzysłowów jest wyłączone dla tablic generowanych przez dzielenie; stąd
Następujące:
linia="jeden::trzy"
-l "${(s.:.)linia}"
generuje dwie linie wyjściowe dla pierwszej oraz trzy i pomija puste pole. Do
zastąp to zachowanie, podaj `(@)flaga, tj „${(@s.:.)linia}”.
Z:optuje:
As z ale pobiera kombinację liter opcji pomiędzy następującą parą
znaki ogranicznika. Bez opcji efekt jest identyczny z. (Z+c+) Przyczyny
komentarze, które mają zostać przeanalizowane jako ciąg znaków i zachowane; dowolne pole w wynikowej tablicy
rozpoczynający się od niecytowanego komentarza. Znak jest komentarzem. (Z+C+) powoduje komentarze
do przeanalizowania i usunięcia. Zasada dotycząca komentarzy jest standardowa: wszystko pomiędzy a
słowo zaczynające się od trzeciego znaku $HISTCHARY, domyślna #, do następnego
nowa linia jest komentarzem. (Z+n+) powoduje, że niecytowane znaki nowej linii są traktowane jak zwykłe
białe znaki, w przeciwnym razie są one traktowane tak, jakby były ogranicznikami kodu powłoki i
zamienione na średniki. Opcje są łączone w tym samym zestawie ograniczników,
na przykład (Z+Cn+).
_:Flagi:
Podkreślenie (_) jest zarezerwowana do wykorzystania w przyszłości. Od tej wersji zsh,
nie ma ważnych Flagi; wszystko, co następuje po podkreśleniu, inne niż puste
pary ograniczników, jest traktowana jako błąd, a sama flaga nie ma żadnego wpływu.
Poniższe flagi mają znaczenie w przypadku ${...#...} or ${...%...} formularze. Plik S oraz I
flagi mogą być również używane z ${.../...} formy.
S Szukaj podciągów, a także początków i końców; z # zacząć od nowa
i z % zacznij od końca ciągu. Z podstawieniem przez ${.../...} or
${...//...}, określa dopasowanie niezachłanne, tj. najkrótsze zamiast
należy zastąpić najdłuższe dopasowanie.
I:expr:
Szukaj exprmecz (gdzie expr jest liczbą). Ma to zastosowanie tylko wtedy, gdy
wyszukiwanie podciągów za pomocą S flaga lub z ${.../...} (tylko
exprdopasowanie jest zastąpione) lub ${...//...} (wszystkie mecze z exprsą
podstawiony). Domyślnie wybierany jest pierwszy mecz.
exprDopasowanie jest liczone w taki sposób, że w każdym przypadku jest jedno dopasowanie lub zero dopasowań
pozycja początkowa w ciągu, chociaż w przypadku globalnych dopasowań podstawieniowych
nakładające się poprzednie zastąpienia są ignorowane. Z ${...%...} oraz ${...%%...}
formach, pozycja początkowa meczu przesuwa się do tyłu od końca w miarę
indeks wzrasta, podczas gdy w przypadku pozostałych form idzie do przodu od początku.
Stąd ze sznurkiem
który wyłącznik is dotychczasowy prawo wyłącznik dla Ipswich?
podstawienia formy ${(SI:N:)ciąg#w*ch} as N wzrosty od 1 będą zgodne
i usuń `który', 'czarownica', 'czarownica' i `wich'; formularz za pomocą `##' będzie pasować i
usuń `który wyłącznik is dotychczasowy prawo wyłącznik dla Ipswich', 'czarownica is dotychczasowy prawo wyłącznik
dla Ipswich', 'czarownica dla Ipswich' i `wich'. Formularz wykorzystujący `%' usunie
takie same dopasowania jak dla `#', ale w odwrotnej kolejności, a formularz używający `%%' Usunie
takie same dopasowania jak dla `##' w odwrotnej kolejności.
B Uwzględnij w wyniku indeks początku dopasowania.
E Uwzględnij w wyniku indeks końca dopasowania.
M Uwzględnij dopasowaną część w wyniku.
N Uwzględnij długość dopasowania w wyniku.
R Uwzględnij niedopasowaną część w wyniku (tzw Re).
Zasady
Oto podsumowanie zasad substytucji; zakłada to, że obecne są aparaty ortodontyczne
wokół podstawienia, tj ${...}. Poniżej podano kilka konkretnych przykładów. Notatka
które akceptuje Zsh Development Group Nie odpowiedzialność za jakiekolwiek uszkodzenia mózgu, które mogą
wystąpić podczas czytania poniższych zasad.
1. Zagnieżdżone podstawienie
Jeśli jest wiele zagnieżdżonych ${...} formularze są obecne, następuje podstawienie z
wewnątrz na zewnątrz. Na każdym poziomie podstawienie uwzględnia, czy
bieżąca wartość jest skalarem lub tablicą, niezależnie od tego, czy całe podstawienie jest typu double
cudzysłowy i jakie flagi są dostarczane do bieżącego poziomu podstawienia, tak jak
gdyby zagnieżdżone podstawienie było najbardziej zewnętrzne. Flagi nie są propagowane do
załączając podstawienia; zagnieżdżone podstawienie zwróci skalar lub an
tablica określona przez flagi, ewentualnie dostosowana do cytowania. Wszystkie poniższe
w stosownych przypadkach podejmowane są odpowiednie kroki na wszystkich poziomach substytucji. Zauważ to, chyba że
`(P)' flaga jest obecna, flagi i wszelkie indeksy dolne odnoszą się bezpośrednio do wartości
zagnieżdżonego podstawienia; na przykład ekspansja ${${foo}} zachowuje się dokładnie
sama, jak ${foo}.
Na każdym zagnieżdżonym poziomie podstawienia podstawione słowa podlegają wszelkim formom
podstawienie pojedynczych słów (tj. nie generowanie nazwy pliku), łącznie z poleceniem
podstawienie, rozwinięcie arytmetyczne i rozwinięcie nazw plików (tj ~ oraz =).
Tak więc na przykład ${${:-=kot}:h} rozwija się do katalogu, w którym znajduje się plik jak program
mieszka. (Wyjaśnienie: podstawienie wewnętrzne nie ma parametru poza wartością domyślną
wartość =kot, który jest rozwijany poprzez rozwinięcie nazwy pliku do pełnej ścieżki; zewnętrzny
podstawienie następnie stosuje modyfikator :h i zajmuje część katalogu
ścieżka.)
2. Wewnętrzne parametr Flagi
Dowolne flagi parametrów ustawione przez jeden z skład rodzina poleceń, w szczególności
L, R, Z, u oraz l flagi do dopełnienia i wielkich liter są stosowane bezpośrednio do
wartość parametru. Należy pamiętać, że te flagi są opcjami polecenia, np. `skład -Z';
nie są one takie same, jak flagi używane w podstawieniach parametrów.
3. Parametr indeksowanie
Jeśli wartość jest surowym odwołaniem do parametru z indeksem dolnym, takim jak ${było[3]}The
efekt indeksowania jest stosowany bezpośrednio do parametru. Indeks dolny jest
oceniane od lewej do prawej; kolejne indeksy dolne odnoszą się do wartości skalarnej lub tablicy
uzyskany przez poprzedni indeks dolny. Zatem jeśli było jest tablicą, ${zmienna[1] [2]} jest
drugi znak pierwszego słowa, ale ${zmienna[2,4] [2]} to całe trzecie słowo
(drugie słowo z zakresu słów od drugiego do czwartego oryginalnej tablicy).
Może pojawić się dowolna liczba indeksów dolnych. Flagi takie jak (K) oraz (V) które zmieniają
stosowane są wyniki subskrypcji.
4. Parametr Nazwa wymiana
Efekt dowolny (P) flaga, która traktuje dotychczasową wartość jako nazwę parametru i
zastępuje ją odpowiednią wartością.
5. Podwójny cudzysłów łączący
Jeśli wartość po tym procesie jest tablicą, a podstawienie pojawia się podwójnie
cytaty i żadne z nich (@) flaga ani a # operator długości jest obecny w bieżącym
poziomie, wówczas słowa wartości są łączone z pierwszym znakiem parametru
$IFS, domyślnie spacja pomiędzy każdym słowem (tablice pojedynczych słów nie są modyfikowane).
Jeśli (jot) obecna jest flaga, która służy do łączenia zamiast $IFS.
6. Zagnieżdżone indeksowanie
W tym miejscu oceniane są wszelkie pozostałe indeksy dolne (tj. podstawienie zagnieżdżone).
punkt, w zależności od tego, czy wartość jest tablicą, czy skalarem. Jak z 3., wielokrotność
mogą pojawić się indeksy dolne. Zauważ to ${foo[2,4][2]} jest zatem równoważne z
${${foo[2,4]}[2]} a także do „${${(@)foo[2,4]}[2]}” (zagnieżdżone podstawienie
zwraca tablicę w obu przypadkach), ale nie "${${foo[2,4]}[2]}" (zagnieżdżone
podstawienie zwraca skalar ze względu na cudzysłowy).
7. modyfikatory
Wszelkie modyfikatory określone przez końcowy znak `#', '%', '/' (prawdopodobnie podwojony) lub przez a
zestaw modyfikatorów formularza : ... (zobacz sekcję `Modyfikatory' w sekcji
„Rozszerzenie historii”) są stosowane do słów wartości na tym poziomie.
8. Postać ewaluację
Każdy (#) stosowana jest flaga, oceniając dotychczasowy wynik numerycznie jako znak.
9. Długość
Dowolny inicjał # modyfikator, czyli w formie ${#było}, służy do oceny długości
dotychczasowe wyrażenie.
10. Wymuszony łączący
Jeśli `(jot)' flaga jest obecna lub nie ma `(jot)' flaga jest obecna, ale ciąg ma być
podział zgodnie z regułą 11., a dołączenie nie nastąpiło na etapie 5., dowolne słowa w
wartości są łączone za pomocą podanego ciągu lub pierwszego znaku $IFS
jeśli żaden. Należy pamiętać, że `(F)' flag domyślnie dostarcza ciąg znaków umożliwiający dołączenie do tego
sposób.
11. Prosty słowo rozsadzający w ułamku sekundy
Jeśli jeden z `(S)' lub `(fa)obecne są flagi ' lub `=specyfikator był obecny
(na przykład ${=było}), słowo jest dzielone według wystąpień określonego ciągu lub (for =
bez żadnej z dwóch flag) dowolny ze znaków w $IFS.
Jeśli nie `(S)', '(fa)' lub `=' zostało podane, ale słowo to nie jest cytowane i opcja
SH_WORD_SPLIT jest ustawione, słowo jest dzielone w przypadku wystąpienia któregokolwiek ze znaków w
$IFS. Należy zauważyć, że ten krok również ma miejsce na wszystkich poziomach zagnieżdżonego podstawienia.
12. Walizka modyfikacja
Dowolna modyfikacja przypadku z jednej z flag (L), (LUB) or (DO) jest stosowany.
13. Ucieczka sekwencja wymiana
Najpierw wszelkie zamienniki z (G) flaga, a następnie dowolny styl podpowiedzi
formatowanie z (%) stosowana jest rodzina flag.
14. Cytuj aplikacja
Wszelkie cytowanie i cofanie cytowania przy użyciu (Q) oraz (P) i powiązane flagi są stosowane.
15. Informator nazywania
Dowolne podstawienie nazwy katalogu przy użyciu (D) flaga jest stosowana.
16. Widoczność wzmocnienie
Wszelkie modyfikacje mające na celu uwidocznienie znaków za pomocą (V) flaga jest stosowana.
17. Leksykalny słowo rozsadzający w ułamku sekundy
Jeśli „(z)„flaga lub jedna z form”(Z)flaga jest obecna, słowo jest
split tak, jakby był to wiersz poleceń powłoki, tak aby cudzysłowy i inne
metaznaki służą do decydowania o tym, co stanowi słowo. Zwróć uwagę na tę formę
podział jest całkowicie odmienny od tego opisanego przez regułę 11.: nie używa
$IFSi nie powoduje wymuszonego łączenia.
18. Wyjątkowość
Jeśli wynikiem jest tablica i `(U)' flaga była obecna, są zduplikowane elementy
usunięty z tablicy.
19. Kolejność
Jeśli wynikiem jest nadal tablica i jeden z `(O)' lub `(LUB)obecne były flagi,
kolejność tablicy jest zmieniona.
20. RC_EXPAND_PARAM
W tym momencie zostaje podjęta decyzja, czy mają być jakieś wynikowe elementy tablicy
łącz element po elemencie z otaczającym tekstem, zgodnie z wartością
RC_EXPAND_PARAM opcję lub `^' flaga.
21. Ponowna ocena
Dowolny `(E)' flaga jest stosowana do wartości, zmuszając ją do ponownego sprawdzenia pod kątem nowej
podstawień parametrów, ale także podstawień poleceń i arytmetycznych.
22. Wyściółka
Każde uzupełnienie wartości znakiem `(l.wypełniać.)' lub `(R.wypełniać.)stosowane są flagi '.
23. Semantyczny łączący
W kontekstach, w których semantyka rozwinięcia wymaga jednego słowa, aby otrzymać wszystkie słowa
są ponownie łączone z pierwszym znakiem IFS między. Zatem w `${(P)${(f)linie}}'
wartość ${linie} jest dzielony w miejscu nowej linii, ale następnie musi zostać ponownie połączony
dotychczasowy P można zastosować flagę.
Jeśli ani jedno słowo nie jest wymagane, reguła ta jest pomijana.
24. pusty argument usuwanie
Jeśli podstawienie nie jest podane w cudzysłowie, jakakolwiek wynikowa długość wynosi zero
argument, niezależnie od tego, czy pochodzi ze skalara, czy z elementu tablicy, jest usuwany z listy
argumentów wstawianych do wiersza poleceń.
Ściśle mówiąc, usunięcie następuje później, podobnie jak w przypadku innych formularzy
substytucji; należy tutaj zauważyć, że następuje to po którymkolwiek z
powyższe operacje na parametrach.
Przykłady
Flaga f przydaje się do dzielenia podstawienia w cudzysłowie wiersz po wierszu. Na przykład,
${(f)"$(filet)"} zastępuje treść filet podzielone tak, że każda linia jest elementem
wynikowej tablicy. Porównaj to z efektem $(filet) sam, który dzieli
zapisz słowa lub te same cudzysłowy, co spowoduje utworzenie całej zawartości pliku
zapisz pojedynczy ciąg.
Poniżej ilustrują zasady zagnieżdżonych rozwinięć parametrów. Przypuszczam, że $ foo
zawiera tablicę (bar baza):
„${(@)${foo}[1]}”
To daje wynik b. Po pierwsze, substytucja wewnętrzna „${foo}”, który nie ma
tablica (@) flaga, daje wynik w postaci pojedynczego słowa "bar baza". Substytucja zewnętrzna
„${(@)...[1]}” wykrywa, że jest to skalar, więc (pomimo `(@)flaga).
indeks dolny wybiera pierwszy znak.
„${${(@)foo}[1]}”
Daje to wynik `bar'. W tym przypadku podstawienie wewnętrzne „${(@)foo}”
tworzy tablicę `(bar baza)'. Substytucja zewnętrzna „${...[1]}” wykrywa to
jest to tablica, która wybiera pierwsze słowo. Przypomina to prosty przypadek
„${foo[1]}”.
Jako przykład zasad dzielenia i łączenia słów załóżmy $ foo zawiera tablicę
`(topór 1 bx1)'. Następnie
${(s/x/)foo}
tworzy słowa `a', '1 b' i `1'.
${(j/x/s/x/)foo}
produkuje `a', '1', 'b' i `1'.
${(s/x/)foo%%1*}
produkuje `a' i ` b' (zwróć uwagę na dodatkową spację). Ponieważ podstawienie następuje przed którymkolwiek
łączenia lub dzielenia, operacja najpierw generuje zmodyfikowaną tablicę (topór bx),
który łączy się, aby dawać "topór bx", a następnie podziel, aby uzyskać `a', ' b' i `'. The
ostatni pusty ciąg znaków zostanie wówczas usunięty, ponieważ nie jest ujęty w cudzysłów.
COMMAND PODSTAWIENIE
Polecenie ujęte w nawiasy poprzedzone znakiem dolara, np. `$(...)' lub cytowany z
poważne akcenty, takie jak ``...`', jest zastępowany standardowym wyjściem z dowolnym zakończeniem
znaki nowej linii usunięte. Jeśli podstawienie nie jest ujęte w cudzysłów, wynikiem jest
podzielone na słowa za pomocą IFS parametr. Podstawienie `$(kot bla)' można zastąpić
przez odpowiednik, ale szybszy `$(bla)'. W obu przypadkach, jeśli opcja GLOB_SUBST jest ustawiony,
dane wyjściowe kwalifikują się do generowania nazwy pliku.
ARYTMETYKA EKSPANSJA
Ciąg znaków w postaci `$[exp]' lub `$((exp))' zostaje zastąpiony wartością
wyrażenie arytmetyczne exp. exp jest poddawany parametr ekspansja, komenda podstawienie
oraz arytmetyka ekspansja zanim zostanie oceniony. Zobacz sekcję „Obliczanie arytmetyczne”.
KLAMRA EKSPANSJA
Ciąg znaków w postaci `bla{xx,yy,zz}bar' jest rozszerzane do poszczególnych słów `fooxxbar',
`fooybar' i `foozzbar'. Kolejność od lewej do prawej zostaje zachowana. Taka konstrukcja może być
zagnieżdżone. Przecinki można cytować, aby uwzględnić je dosłownie w słowie.
Wyrażenie postaci `{n1..n2}', gdzie n1 oraz n2 są liczbami całkowitymi, jest rozwijany do każdego
numer pomiędzy n1 oraz n2 włącznie. Jeśli którakolwiek liczba zaczyna się od zera, wszystkie
wynikowe liczby zostaną uzupełnione zerami wiodącymi do tej minimalnej szerokości, ale for
liczby ujemne - znak jest również uwzględniany w szerokości. Jeśli numery są w środku
w kolejności malejącej, wynikowa sekwencja będzie również w kolejności malejącej.
Wyrażenie postaci `{n1..n2..n3}', gdzie n1, n2, n3 są liczbami całkowitymi, jest rozwijany
jak wyżej, ale tylko każdy n3numer zaczynający się od n1 jest wyjściem. Jeśli n3 jest ujemny
liczby są wyprowadzane w odwrotnej kolejności, różni się to nieco od zwykłej zamiany n1
oraz n2 w przypadku, gdy krok n3 nie dzieli równomiernie zakresu. Może być zerowe wypełnienie
określony w dowolnej z trzech liczb, określenie jej w trzeciej może być przydatne do uzupełnienia
przykład `{-99..100..01}', którego nie można określić, wstawiając 0 na którymkolwiek z nich
pierwsze dwie cyfry (tj. uzupełnienie dwóch znaków).
Wyrażenie postaci `{c1..c2}', gdzie c1 oraz c2 są pojedynczymi znakami (które mogą być
znaków wielobajtowych) jest rozwijany do każdego znaku z zakresu od c1 do c2 in
dowolna sekwencja znaków używana wewnętrznie. Dla znaków z punktami kodowymi poniżej 128
to jest amerykański kod ASCII (jest to jedyny przypadek, którego będzie potrzebować większość użytkowników). Jeśli będzie interwencja
znaku nie można wydrukować, stosuje się odpowiedni cytat, aby umożliwić jego wydruk. Jeśli
kolejność znaków jest odwrócona, wyjście jest w odwrotnej kolejności, np. `{d..a}' jest
podstawione jako `d c b a'.
Jeżeli wyrażenie nawiasowe nie pasuje do żadnej z powyższych form, pozostaje ono niezmienione, chyba że
opcja BRACE_CCL (skrót od „klasa znaków nawiasowych”). W takim razie to
zostaje rozwinięta do listy pojedynczych znaków pomiędzy nawiasami klamrowymi, posortowanych w
kolejność znaków w zestawie znaków ASCII (znaki wielobajtowe nie są obecnie
obsługiwane). Składnia jest podobna do a [...] wyrażenie w generowaniu nazwy pliku: `-' jest
traktowane specjalnie w celu określenia zakresu znaków, ale `^' lub `!' jako pierwszy znak
jest traktowany normalnie. Na przykład `{abcdef0-9}' rozwija się do 16 słów 0 1 2 3 4 5 6 7 8 9 a
b c d e f.
Należy pamiętać, że rozwijanie nawiasów nie jest częścią generowania nazwy pliku (globbingu); ekspresja
jak na przykład */{foo,bar} jest podzielony na dwa osobne słowa */bla oraz */bar przed nazwą pliku
ma miejsce pokolenie. W szczególności należy pamiętać, że może to spowodować brak dopasowania
błąd, jeśli przez z tych dwóch wyrażeń nie pasuje; z tym należy kontrastować
*/(foo|bar), który jest traktowany jako pojedynczy wzór, ale poza tym ma podobne skutki.
Aby połączyć rozwijanie nawiasów z rozwijaniem tablicy, zobacz ${^specyfikacja} formularz opisany w pkt
sekcja Rozszerzenie parametrów powyżej.
NAZWA PLIKU EKSPANSJA
Każde słowo jest sprawdzane, aby zobaczyć, czy zaczyna się od niecytowanego „~'. Jeśli tak, to słowo
aż do `/' lub koniec słowa, jeśli nie ma `/', jest sprawdzane, czy tak jest
podstawione w jeden z opisanych tutaj sposobów. Jeśli tak, to `~' i sprawdzone
część zastępuje się odpowiednią wartością zastępczą.
`~' sam w sobie jest zastępowany przez wartość $ HOME. `~', po którym następuje `+' lub `-' jest
zastąpiony odpowiednio bieżącym lub poprzednim katalogiem roboczym.
`~', po którym następuje liczba, zostaje zastąpiony katalogiem znajdującym się na tej pozycji w katalogu
stos. `~0' jest równoważne `~+' i `~1' jest na szczycie stosu. `~+', po którym następuje a
numer jest zastępowany katalogiem znajdującym się na tej pozycji na stosie katalogów. `~ + 0' jest
odpowiednik `~+' i `~ + 1' jest na szczycie stosu. `~-', po którym następuje liczba
zastąpiony katalogiem o większej liczbie pozycji od dołu stosu. `~-0' jest
dół stosu. The PUSHD_MINUS opcja zamienia efekty `~+' i `~-' gdzie
po nich następuje liczba.
Dynamiczny o imieniu katalogi
Jeśli funkcja zsh_nazwa_katalogu istnieje lub zmienna powłoki
zsh_nazwa_katalogu_funkcje istnieje i zawiera tablicę nazw funkcji, to
Funkcje służą do implementowania dynamicznego nazewnictwa katalogów. Funkcje są wypróbowywane
kolejności, aż zwróci status zero, dlatego ważne jest, aby funkcje sprawdzały, czy tak jest
może zająć się daną sprawą i zwrócić odpowiedni status.
`~', po którym następuje ciąg znaków namstr w niecytowanych nawiasach kwadratowych jest traktowane specjalnie jako a
dynamiczna nazwa katalogu. Należy pamiętać, że zawsze pierwszy niecytowany zamykający nawias kwadratowy
kończy się namstr. Do funkcji powłoki przekazywane są dwa argumenty: ciąg znaków n (dla imienia)
oraz namstr. Powinien albo ustawić tablicę odpowiadać do pojedynczego elementu, jakim jest
katalog odpowiadający nazwie i zwróć status zero (wykonując przypisanie jako
ostatnia instrukcja jest zwykle wystarczająca), w przeciwnym razie powinna zwrócić status niezerowy. W pierwszym
w przypadku, gdy element odpowiedzi jest używany jako katalog; w tym drugim przypadku jest to podstawienie
uznano za porażkę. Jeśli wszystkie funkcje zawiodą i opcja NIE PASUJE jest ustawiony, błąd
wyników.
Funkcje zdefiniowane jak powyżej służą także do sprawdzania, czy katalog można przekształcić w plik a
nazwę, na przykład podczas drukowania stosu katalogów lub podczas rozwijania %~ w podpowiedziach. W
w tym przypadku do każdej funkcji przekazywane są dwa argumenty: ciąg znaków d (dla katalogu) i
kandydat do nazewnictwa dynamicznego. Funkcja powinna albo zwrócić stan niezerowy, jeśli
funkcja nie może nazwać katalogu lub powinna zawierać odpowiedź tablicy
dwa elementy: pierwszy to dynamiczna nazwa katalogu (która pojawi się w pliku
`~[...]'), a druga to długość prefiksu katalogu, który ma zostać zastąpiony. Dla
na przykład, jeśli katalog próbny to /home/mojanazwa/src/zsh i dynamiczna nazwa dla
/home/moje imię/src (który ma 16 znaków). s, to funkcja się ustawia
odpowiedź=(s 16)
Zwrócona w ten sposób nazwa katalogu jest porównywana z możliwymi nazwami statycznymi części pliku
ścieżka katalogu, jak opisano poniżej; jest używany, jeśli długość przedrostka jest zgodna (16 w
przykład) jest dłuższy niż odpowiadający dowolnej nazwie statycznej.
Nie jest wymagane, aby funkcja implementowała oba te elementy n oraz d połączenia; na przykład to
może być właściwe, aby pewne dynamiczne formy ekspansji nie były przypisywane nazwom.
W takim przypadku dowolne wywołanie z pierwszym argumentem d powinien spowodować, że stan będzie niezerowy
zwrócony.
System uzupełniania wywołuje `zsh_nazwa_katalogu c', po którym następują równoważne wywołania
elementy tablicy zsh_nazwa_katalogu_funkcje, jeśli istnieje, w celu uzupełnienia
dynamiczne nazwy katalogów. Kod tego powinien być taki sam jak każdego innego uzupełnienia
działać zgodnie z opisem w zshcompsys(1).
Oto działający przykład: funkcja rozwijająca dowolne nazwy dynamiczne zaczynające się od
ciąg p: do katalogów poniżej /home/pws/perce. W tym prostym przypadku statyczna nazwa
katalog byłby równie skuteczny.
nazwa_katalogu zsh() {
naśladować -L Zsh
ustawienie rozszerzonyglob
miejscowy -a mecz zacznij naprawiać
if [[ $1 = d ]]; następnie
# skręcić dotychczasowy katalog najnowszych a Nazwa
if [[ $2 = (#b)(/home/pws/perce/)([^/]##)* ]]; następnie
skład - Do odpowiadać
odpowiedź=(p:$dopasowanie[2] $(( ${#dopasowanie[1]} + ${#dopasowanie[2]} )) )
więcej
powrót 1
fi
Elif [[ $1 = n ]]; następnie
# skręcić dotychczasowy Nazwa najnowszych a katalog
[[ $2 != (#b)p:(?*) ]] && powrót 1
skład - Do odpowiadać
odpowiedź=(/home/pws/perforce/$match[1])
Elif [[ $1 = c ]]; następnie
# kompletny Nazwy
miejscowy objaśnić
miejscowy -a dirs
dirs=(/home/pws/perce/*(/:t))
dirs=(p:${^katalogi})
_poszukiwany katalogi-dynamiczne objaśnić 'dynamiczny informator' komp -S\] -a dirs
powrót
więcej
powrót 1
fi
powrót 0
}
Statyczny o imieniu katalogi
`~', po którym następuje wszystko, co nie zostało jeszcze ujęte, składające się z dowolnej liczby znaków alfanumerycznych
znaki lub podkreślenie (`_'), łącznik (`-') lub kropka (`.') jest postrzegane jako nazwane
katalog i zastępowany przez wartość tego nazwanego katalogu, jeśli zostanie znaleziony. Nazwane katalogi
są zazwyczaj katalogami domowymi użytkowników systemu. Można je również zdefiniować, jeśli
tekst po `~' to nazwa parametru powłoki łańcuchowej, którego wartość zaczyna się od `/'.
Należy pamiętać, że końcowe ukośniki zostaną usunięte ze ścieżki do katalogu (choć plik
oryginalny parametr nie jest modyfikowany).
Możliwe jest również zdefiniowanie nazw katalogów za pomocą -d opcja do haszysz wbudowany.
Kiedy powłoka drukuje ścieżkę (np. podczas rozwijania %~ w monitach lub podczas drukowania
stos katalogów), ścieżka jest sprawdzana, czy ma nazwany katalog jako przedrostek.
Jeśli tak, część przedrostkowa zostaje zastąpiona przez `~', po którym następuje nazwa
informator. Stosowany jest krótszy z dwóch sposobów odwoływania się do katalogu, tj. albo
nazwa katalogu lub pełna ścieżka; nazwa jest używana, jeśli są tej samej długości. The
parametry $PWD oraz $OLDPWD nigdy nie są skracane w ten sposób.
`=' ekspansja
Jeśli słowo zaczyna się od niecytowanego „=' i RÓWNA SIĘ opcja jest ustawiona, pozostała część
słowo jest traktowane jako nazwa polecenia. Jeśli istnieje polecenie o tej nazwie, słowo to
zastąpione pełną ścieżką do polecenia.
Komentarz
Rozwijanie nazw plików odbywa się po prawej stronie przypisania parametrów,
włączając te pojawiające się po poleceniach skład rodzina. W tym wypadku prawo
hand będzie traktowana jako lista oddzielona dwukropkami na wzór PATH parametr,
tak, że `~' lub `='po `:' kwalifikuje się do rozbudowy. Każde takie zachowanie może
wyłączyć, cytując `~', `=' lub całe wyrażenie (ale nie tylko
okrężnica); the RÓWNA SIĘ opcja jest również przestrzegana.
Jeśli opcja MAGIC_EQUAL_SUBST jest ustawiony, dowolny niecytowany argument powłoki w formularzu
`identyfikator=wyrażenie' kwalifikuje się do rozszerzania plików, jak opisano w poprzednim
ustęp. Cytując pierwsze `=' również to utrudnia.
NAZWA PLIKU GENERACJA
Jeśli słowo zawiera niecytowane wystąpienie jednego ze znaków `*', '(', '|', '<', '[',
lub `?', jest uważany za wzorzec generowania nazwy pliku, chyba że GLOB Jest opcja
nieoprawny. Jeśli EXTENDED_GLOB opcja jest ustawiona, `^' i `#Znaki ' oznaczają także a
wzór; w przeciwnym razie nie są one traktowane specjalnie przez skorupę.
Słowo jest zastępowane listą posortowanych nazw plików pasujących do wzorca. Jeśli nie
zostanie znaleziony pasujący wzorzec, powłoka wyświetli komunikat o błędzie, chyba że NULL_GLOB opcja
jest ustawione, w takim przypadku słowo jest usuwane; lub chyba, że NIE PASUJE opcja jest odznaczona, w którym
przypadku, gdy słowo pozostanie niezmienione.
Podczas generowania nazwy pliku znak `/' musi być dopasowane jawnie; także `.' musi być
dopasowywane jawnie na początku wzorca lub po `/', dopóki GLOB_DOTS
opcja jest ustawiona. Żaden wzorzec generowania nazwy pliku nie pasuje do plików `.' lub `..'. W innych
przypadki dopasowania wzorca, `/' i `.' nie są traktowani specjalnie.
Glob Operatorzy
* Dopasowuje dowolny ciąg, łącznie z ciągiem pustym.
? Pasuje do dowolnego znaku.
[...] Pasuje do dowolnego z załączonych znaków. Zakresy znaków można określić za pomocą
oddzielając dwa znaki znakiem `-'. `-' lub `]' można dopasować, dołączając go jako
pierwszy znak na liście. Istnieje również kilka nazwanych klas
znaków w postaci `[:Nazwa:]' o następującym znaczeniu. Użycie pierwszego zestawu
makra dostarczane przez system operacyjny w celu sprawdzenia danego znaku
kombinacje, w tym wszelkie modyfikacje wynikające z lokalnych ustawień językowych, patrz
ctype(3):
[:aln:]
Znak jest alfanumeryczny
[:alfa:]
Znak jest alfabetyczny
[:ascii:]
Znak jest 7-bitowy, tj. jest znakiem jednobajtowym bez górnego bitu
ustawiony.
[:pusty:]
Znakiem jest spacja lub tabulator
[:ctrl:]
Znak jest znakiem kontrolnym
[:cyfra:]
Znak jest cyfrą dziesiętną
[:wykres:]
Znak jest znakiem drukowalnym, innym niż białe znaki
[:niżej:]
Znak jest małą literą
[:wydrukować:]
Postać nadaje się do wydrukowania
[:punkt:]
Znak można wydrukować, ale nie jest to znak alfanumeryczny ani biały
[:przestrzeń:]
Znak jest białą spacją
[:górny:]
Znak jest wielką literą
[:xcyfra:]
Znak jest cyfrą szesnastkową
Inny zestaw nazwanych klas jest obsługiwany wewnętrznie przez powłokę i tak nie jest
wrażliwe na lokalizację:
[:IDENT:]
Znak może stanowić część identyfikatora powłoki, na przykład a
Nazwa parametru
[:IFS:]
Znak służy jako separator pola wejściowego, tj. jest zawarty w
IFS parametr
[:IFSSPACE:]
Znak jest białym znakiem IFS; zobacz dokumentację dot IFS
zszparam(1) strona podręcznika.
[:NIEKOMPLETNY:]
Dopasowuje bajt rozpoczynający niekompletny znak wielobajtowy. Zauważ to
może istnieć sekwencja więcej niż jednego bajtu, które razem tworzą
przedrostek znaku wielobajtowego. Aby przetestować potencjalnie niekompletny bajt
sekwencji, użyj wzorca `[[:NIEKOMPLETNY:]]*'. To nigdy nie będzie pasować do a
sekwencja rozpoczynająca się od prawidłowego znaku wielobajtowego.
[:NIEWAŻNY:]
Dopasowuje bajt, który nie rozpoczyna prawidłowego znaku wielobajtowego. Zwróć na to uwagę
może być bajtem kontynuacji niekompletnego znaku wielobajtowego w dowolnej części
ciągu wielobajtowego składającego się z nieprawidłowego i niekompletnego znaku wielobajtowego
znaki są traktowane jako pojedyncze bajty.
[:SŁOWO:]
Znak jest traktowany jako część słowa; ten test jest wrażliwy na
wartość ZNAKI SŁÓW parametr
Należy pamiętać, że nawiasy kwadratowe są uzupełnieniem tych obejmujących cały zestaw
znaków, więc aby przetestować pojedynczy znak alfanumeryczny, potrzebujesz `[[:aln:]]'.
Nazwane zestawy znaków mogą być używane razem z innymi typami, np. `[[:alfa:]0-9]'.
[^...]
[!...] Jak [...], z tą różnicą, że pasuje do dowolnego znaku, który nie znajduje się w danym zestawie.
<[x]-[y]>
Pasuje do dowolnej liczby z zakresu x do y, włącznie. Może być którykolwiek z tych numerów
pominięto, aby zakres był otwarty; stąd `<->' pasuje do dowolnej liczby. Aby dopasować
poszczególne cyfry, [...] forma jest bardziej efektywna.
Zachowaj ostrożność podczas używania innych symboli wieloznacznych sąsiadujących ze wzorami tej formy; Do
przykład, * faktycznie dopasuje dowolną liczbę na początku
ciąg, ponieważ `<0-9>' będzie pasować do pierwszej cyfry, a `*' będzie pasować do każdego
inni. Jest to pułapka dla nieostrożnych, ale w rzeczywistości jest nieuniknioną konsekwencją
zasada, że zawsze kończy się sukcesem najdłuższy możliwy mecz. Wyrażenia takie jak
`[^[:cyfra:]]*' można zamiast tego użyć.
(...) Pasuje do załączonego wzoru. Służy do grupowania. Jeśli KSH_GLOB opcja
jest ustawiony, następnie `@', '*', '+', '?' lub `!' bezpośrednio poprzedzający `(' jest leczony
specjalnie, jak opisano szczegółowo poniżej. Opcja SH_GLOB zapobiega gołym nawiasom
używane w ten sposób, chociaż KSH_GLOB opcja jest nadal dostępna.
Należy pamiętać, że grupowanie nie może rozciągać się na wiele katalogów: jest to błąd
`/' w grupie (dotyczy to tylko wzorców używanych przy generowaniu nazw plików).
Jest jeden wyjątek: grupa formularzy (klepnięcie/)# pojawiająca się jako pełna ścieżka
segment może pasować do sekwencji katalogów. Na przykład, foo/(a*/)#bar zapałki
foo/bar, foo/dowolny/bar, foo/dowolny/dowolny/barI tak dalej.
x|y Pasuje albo x or y. Ten operator ma niższy priorytet niż jakikolwiek inny. `|'
znak musi znajdować się w nawiasach, aby uniknąć interpretacji jako potoku.
^x (Wymaga EXTENDED_GLOB do ustawienia.) Pasuje do wszystkiego oprócz wzorca x, To
ma wyższy priorytet niż `/', więc `^foo/bar' przeszuka katalogi w `.'
z wyjątkiem `./bla' dla pliku o nazwie `bar'.
x~y (Wymaga EXTENDED_GLOB do ustawienia.) Dopasuj wszystko, co pasuje do wzorca x ale
nie pasuje y. Ma to niższy priorytet niż jakikolwiek operator z wyjątkiem `|', więc
`*/*~foo/bar' wyszuka wszystkie pliki we wszystkich katalogach w `.', a następnie wyklucz
`foo/bargdyby taki mecz był. Można wykluczyć wiele wzorców
`bla~bar~baz'. We wzorcu wykluczenia (y),`/' i `.' nie są traktowani specjalnie
tak jak to zwykle robią podczas globbingu.
x# (Wymaga EXTENDED_GLOB do ustawienia.) Dopasowuje zero lub więcej wystąpień
wzorzec x. Ten operator ma wysoki priorytet; `12 #' jest równoważne `1(2#)',
zamiast `(12)#'. Jest to błąd związany z niecytowanym `#podążać za czymś
nie można powtórzyć; obejmuje to pusty ciąg znaków, po którym następuje wzorzec
`##' lub nawiasy, gdy są częścią a KSH_GLOB wzór (na przykład `!(bla)#' jest
nieważne i należy je zastąpić znakiem `*(!(bla))”).
x## (Wymaga EXTENDED_GLOB do ustawienia.) Dopasowuje jedno lub więcej wystąpień wzorca
x. Ten operator ma wysoki priorytet; `12 ##' jest równoważne `1(2##)', raczej
niż `(12)##'. Nie więcej niż dwa aktywne `#' znaki mogą występować razem. (Notatka
potencjalne zderzenie z kwalifikatorami glob w postaci `1(2##)' które powinno
dlatego należy go unikać.)
podobny do ksh Glob Operatorzy
Jeśli KSH_GLOB opcja jest ustawiona, działanie nawiasów można modyfikować za pomocą poprzedzającego
`@', '*', '+', '?' lub `!'. Znak ten nie musi być niecytowany, aby wywołać efekty specjalne,
ale `(' musi być.
@(...) Dopasuj wzór w nawiasach. (Jak `(...)'.)
*(...) Dopasuj dowolną liczbę wystąpień. (Jak `(...)#', z wyjątkiem tego katalogu rekurencyjnego
wyszukiwanie nie jest obsługiwane.)
+(...) Dopasuj co najmniej jedno wystąpienie. (Jak `(...)##', z wyjątkiem tego katalogu rekurencyjnego
wyszukiwanie nie jest obsługiwane.)
?(...) Dopasuj zero lub jedno wystąpienie. (Jak `(|...)'.)
!(...) Dopasuj wszystko oprócz wyrażenia w nawiasach. (Jak `(^(...))'.)
Precedens
Pierwszeństwo operatorów podanych powyżej to (najwyższe) `^', '/', '~', '|' (najniższy); the
pozostałe operatory są po prostu traktowane od lewej do prawej jako część ciągu znaków, z `#'
i `##' odnoszący się do najkrótszej możliwej jednostki poprzedzającej (tj. znaku, `?', '[...]',
`<...>' lub wyrażenie w nawiasach). Jak wspomniano powyżej, plik `/' używany jako katalog
separator może nie pojawiać się w nawiasach, natomiast znak `|' muszę to zrobić; we wzorach stosowanych w
kontekstach innych niż generowanie nazw plików (na przykład w walizka instrukcje i testy wewnątrz
`[[...]]'), a `/' nie jest wyjątkowy; i `/' również nie jest specjalne po `~' pojawianie się
zewnętrzne nawiasy we wzorcu nazwy pliku.
Globowanie Flagi
Istnieją różne flagi, które wpływają na dowolny tekst po prawej stronie, aż do końca
grupa obejmująca lub do końca wzoru; wymagają EXTENDED_GLOB opcja. Wszystko
przybrać formę (#X) gdzie X może mieć jedną z następujących postaci:
i Wielkość liter nie jest uwzględniana: wielkie i małe litery we wzorcu odpowiadają górnym lub
małe litery.
l Małe litery we wzorcu odpowiadają wielkim i małym literom; górny
znaki wielkości liter we wzorcu nadal odpowiadają tylko wielkim literom.
I Wielkość liter ma znaczenie: lokalnie neguje efekt i or l Od tego momentu.
b Aktywuj odniesienia zwrotne dla grup w nawiasach we wzorcu; to nie działa
w generowaniu nazwy pliku. Gdy wzór z zestawem aktywnych nawiasów jest
dopasowane, ciągi dopasowane przez grupy są przechowywane w tablicy $dopasujThe
indeksy początku dopasowanych nawiasów w tablicy $mrozpoczniji
indeksy końca tablicy $naprawić, z pierwszym elementem każdej tablicy
odpowiadające pierwszej grupie w nawiasach i tak dalej. Te tablice nie są
w inny sposób wyjątkowy dla powłoki. Indeksy korzystają z tej samej konwencji, co indeksy
podstawienie parametrów, tak aby elementy $naprawić oraz $mrozpocznij może być używany w
indeksy dolne; the KSH_ARRAYS opcja jest przestrzegana. Zestawy flag globalujących nie są
uważane za grupy ujęte w nawiasy; może być tylko pierwszych dziewięć aktywnych nawiasów
powołany.
Na przykład,
foo="a ciąg w a wiadomość"
if [[ $ foo = (a|an)' '(#B)(*)' '* ]]; następnie
${foo[$mpoczątek[1],$naprawa[1]]}
fi
drukuje `ciąg w a'. Należy pamiętać, że pierwszy nawias znajduje się przed (#B) oraz
nie tworzy odwołania wstecznego.
Odniesienia wsteczne działają ze wszystkimi formami dopasowywania wzorców innymi niż nazwa pliku
generacji, ale pamiętaj, że podczas wykonywania dopasowań na całej tablicy, np
${szyk#wzorzec}lub globalne podstawienie, takie jak ${moje pieniądze//klepnięcie/zastępstwo}, tylko
dane dotyczące ostatniego meczu pozostają dostępne. W przypadku zamienników globalnych to
może się jeszcze przydać. Zobacz przykład dla m flaga poniżej.
Numeracja odnośników jest ściśle zgodna z kolejnością otwierania
nawiasy od lewej do prawej w ciągu wzorca, chociaż zestawy nawiasów
może być zagnieżdżony. Istnieją specjalne zasady dotyczące nawiasów, po których następuje znak `#' lub `##'.
Zapamiętywane jest tylko ostatnie dopasowanie nawiasu: na przykład w `[[ Abab =
(#b)([ab])# ]]', tylko ostatnie `b' jest przechowywany w mecz[1]. Zatem dodatkowe nawiasy
może być konieczne dopasowanie całego segmentu: na przykład użyj `X((ab|cd)#)Y' do
dopasowuje cały ciąg znaków `ab' lub `cd'pomiędzy'X' i `Y', używając wartości
$dopasowanie[1] zamiast $dopasowanie[2].
Jeśli dopasowanie się nie powiedzie, żaden z parametrów nie zostanie zmieniony, co w niektórych przypadkach może mieć miejsce
konieczne jest ich wcześniejsze zainicjowanie. Jeśli niektóre odniesienia wsteczne nie działają
match - co ma miejsce, jeśli znajdują się w alternatywnej gałęzi, która nie pasuje, lub
jeśli po nich nastąpią # i dopasowane zero razy - następnie ustawiany jest dopasowany ciąg
do pustego ciągu, a indeksy początkowe i końcowe są ustawione na -1.
Dopasowywanie wzorców z referencjami wstecznymi jest nieco wolniejsze niż bez nich.
B Dezaktywuj odniesienia wsteczne, negując efekt b flagę od tego momentu.
cN,M Flaga (#CN,M) można używać wszędzie tam, gdzie jest to możliwe # or ## można używać operatorów z wyjątkiem
w wyrażeniach `(*/)#' i `(*/)##' w generowaniu nazwy pliku, gdzie `/' ma
specjalne znaczenie; nie można go łączyć z innymi flagami globalizującymi i złym wzorem
błąd wystąpi, jeśli zostanie źle umieszczony. Jest to równoznaczne z formą {N,M} w regularnych
wyrażenia. Do dopasowania wymagany jest poprzedni znak lub grupa N oraz M
razy włącznie. Formularz (#CN) wymaga dokładnie N mecze; (#C,M) jest równoważne
do określenia N jako 0; (#CN,) określa, że nie ma maksymalnego limitu liczby
meczów.
m Ustaw odniesienia do danych dopasowania dla całego dopasowanego ciągu; to jest podobne do
odwołań wstecznych i nie działa przy generowaniu nazw plików. Flaga musi być
efekt na końcu wzorca, tj. nie lokalny dla grupy. Parametry $ MECZ,
$MBEGIN oraz $NAPRAWIĆ zostanie ustawiony na dopasowany ciąg i indeksy
odpowiednio początek i koniec łańcucha. Jest to najbardziej przydatne w przypadku parametru
podstawienia, w przeciwnym razie dopasowany ciąg jest oczywisty.
Na przykład,
arr=(weldt jynx grymasy waqf zo bryknięcie)
${arr//(#m)[aeiou]/${(U)MATCH}}
wymusza zapisanie wszystkich dopasowań (tj. wszystkich samogłosek) wielkimi literami, wyświetlając `bardzo jynx
grimp wAqf zo bryknięcie'.
W przeciwieństwie do odniesień wstecznych, nie ma kary za prędkość korzystania z odniesień do meczów, inne
niż dodatkowe podstawienia wymagane dla ciągów zastępczych w przypadkach takich jak
pokazany przykład.
M Wyłącz m flag, dlatego nie zostaną utworzone żadne odniesienia do danych dopasowania.
anum Przybliżone dopasowanie: num W ciągu pasującym do wzorca dozwolone są błędy.
Zasady tego zostały opisane w kolejnym podrozdziale.
s, e W przeciwieństwie do innych flag, mają one jedynie efekt lokalny i każda musi pojawić się na swojej
własne: `(#S)' i `(#mi)' są jedynymi prawidłowymi formami. `(#S)Flaga ' powiedzie się tylko w
początek ciągu testowego i `(#mi)Flaga ' powiedzie się tylko na końcu
ciąg testowy; odpowiadają `^' i `$' w standardowych wyrażeniach regularnych. Oni
są przydatne do dopasowywania segmentów ścieżki według wzorców innych niż te w nazwie pliku
generacji (gdzie segmenty ścieżki i tak są traktowane oddzielnie). Na przykład,
`*((#s)|/)test((#e)|/)*' dopasowuje segment ścieżki `test' w którymkolwiek z poniższych
smyczki: test, test/na/start, na/końcu/testu, w/test/środek.
Innym zastosowaniem jest podstawienie parametrów; na przykład `${tablica/(#s)A*Z(#e)}' Wola
usuń tylko elementy tablicy, które pasują do pełnego wzorca `A*Z'. Tam są
inne sposoby wykonywania wielu operacji tego typu, jednak kombinacja
operacje podstawienia `/' i `//' z `(#S)' i `(#mi)zapewnia flaga
jedną prostą i zapadającą w pamięć metodę.
Należy pamiętać, że twierdzenia w postaci `(^(#s))' także działa, tj. dopasowuje dowolne miejsce z wyjątkiem at
początek łańcucha, chociaż w rzeczywistości oznacza to „wszystko oprócz a”.
część o zerowej długości na początku ciągu znaków'; musisz użyć `(„” ~ (#s))' do
dopasowuje część łańcucha o zerowej długości, która nie znajduje się na początku.
q `q' i wszystko aż do nawiasu zamykającego flagi globalizujące
ignorowane przez kod dopasowywania wzorca. Ma to na celu wsparcie użycia glob
kwalifikacyjne, patrz poniżej. W rezultacie wzór `(#b)(*).c(#q.)' może być użyte
zarówno do globowania, jak i dopasowywania do ciągu znaków. W pierwszym przypadku
`(#Q.)' będzie traktowane jako kwalifikator globalny, a `(#B)' nie będzie przydatne,
podczas gdy w tym drugim przypadku `(#B)' jest przydatny w przypadku odwołań wstecznych, a `(#Q.)'
zostaną zignorowane. Należy zauważyć, że modyfikatory dwukropków w kwalifikatorach glob również nie są
stosowane w zwykłym dopasowywaniu wzorców.
u Przestrzegaj bieżących ustawień regionalnych przy określaniu obecności znaków wielobajtowych w pliku
wzorzec, pod warunkiem, że powłoka została skompilowana z użyciem WSPARCIE WIELOBAJTOWE. To zastępuje
dotychczasowy MULTIBAJT opcja; domyślne zachowanie jest pobierane z opcji. Porównywać U.
(Mnemonic: zazwyczaj znaki wielobajtowe pochodzą z Unicode w kodowaniu UTF-8,
chociaż można użyć dowolnego rozszerzenia ASCII obsługiwanego przez bibliotekę systemową.)
U Uważa się, że wszystkie znaki mają długość jednego bajtu. Przeciwieństwo u, To
zastępuje MULTIBAJT opcja.
Na przykład ciąg testowy fooxx można dopasować według wzoru (#i)FOOXX, ale nie przez
(#l)FOOXX, (#i)FOO(#I)XX or ((#i)FOOX)X. sznurek (#ia2)przeczytaj określa
dopasowywanie bez uwzględniania wielkości liter readme z maksymalnie dwoma błędami.
Podczas używania składni ksh do grupowania obu KSH_GLOB oraz EXTENDED_GLOB należy ustawić i
lewy nawias należy poprzedzić @. Należy również pamiętać, że flagi nie wpływają na litery
wewnątrz [...] innymi słowy grupy (#i)[az] nadal dopasowuje tylko małe litery.
Na koniec zauważ, że podczas sprawdzania całych ścieżek bez uwzględniania wielkości liter, każdy katalog musi być
wyszukano wszystkie pasujące pliki, tak aby wzór formularza (#i)/foo/bar/... is
potencjalnie powolny.
Przybliżony Dopasowywanie
Podczas dopasowywania w przybliżeniu powłoka rejestruje liczbę znalezionych błędów, czego nie można zrobić
przekroczyć liczbę określoną w ust (#Anum) flagi. Rozpoznawane są cztery rodzaje błędów:
1. Różne postacie, jak w fooxbar oraz fooybar.
2. Transpozycja znaków, jak w banan oraz abnana.
3. Brak znaku w ciągu docelowym, jak we wzorcu droga i cel
ciąg pręt.
4. Dodatkowy znak pojawiający się w ciągu docelowym, np piec oraz starał się.
Zatem wzór (#a3)abcd zapałki dcba, z błędami występującymi przy użyciu pierwszego
regułę dwa razy, a drugą raz, grupując ciąg jako [d] [cb] [a] oraz [a] [bc] [d].
Niedosłowne części wzorca muszą dokładnie pasować, łącznie ze znakami
zakresy: stąd (#a1)??? dopasowuje ciągi o długości cztery, stosując regułę 4 do wartości pustej
część wzorca, ale nie ciągi o długości dwa, ponieważ wszystkie ? musi pasować. Inny
Znaki, które muszą dokładnie pasować, to początkowe kropki w nazwach plików (chyba że GLOB_DOTS
opcja jest ustawiona) i wszystkie ukośniki w nazwach plików, tak aby ABC to dwa błędy z ABC (
ukośnika nie można transponować innym znakiem). Podobnie liczone są błędy
oddzielnie dla nieciągłych ciągów we wzorcu, tak że (ab|cd)ef to dwa błędy z
aebf.
Podczas korzystania z wykluczenia za pośrednictwem ~ operatora, dopasowanie przybliżone jest traktowane w całości
oddzielnie dla wyłączonej części i należy je aktywować osobno. Zatem,
(#a1)CZYTAJ MNIE~CZYTAJ_ME zapałki PRZECZYTAJ MNIE ale nie PRZECZYTAJ MNIE, jako końcówka PRZECZYTAJ MNIE jest dopasowany
bez przybliżenia. Jednakże, (#a1)CZYTAJ~(#a1)CZYTAJ_ME nie pasuje do żadnego wzorca
formularz CZYTAĆ?ME ponieważ wszystkie takie formy są obecnie wykluczone.
Oprócz wykluczeń istnieje tylko jedna ogólna liczba błędów; jednak maksymalne błędy
dozwolone można zmieniać lokalnie i można to ograniczyć poprzez grupowanie. Na przykład,
(#a1)kot((#a0)pies)lis pozwala w sumie na jeden błąd, który może nie wystąpić w pliku pies Sekcja,
i wzór (#a1)kot(#a0)pies(#a1)lis jest równoważne. Należy pamiętać, że moment, w którym
błąd, który zostanie znaleziony po raz pierwszy, ma kluczowe znaczenie dla ustalenia, czy zastosować przybliżenie; Do
przykład, (#a1)abc(#a0)xyz nie będzie pasować abcdxyz, ponieważ błąd występuje w `x',
gdzie aproksymacja jest wyłączona.
Całe segmenty ścieżki można w przybliżeniu dopasować, tak że
`(#a1)/foo/d/jest/dostępny/w/w/barze' pozwala na jeden błąd w dowolnym segmencie ścieżki. To jest dużo
mniej wydajne niż bez (#a1), jednak ponieważ każdy katalog na ścieżce musi być
przeskanowane pod kątem możliwego przybliżonego dopasowania. Najlepiej umieścić (#a1) po dowolnej ścieżce
segmenty, o których wiadomo, że są prawidłowe.
Rekurencyjne Globowanie
Składnik ścieżki w postaci `(bla/)#' dopasowuje ścieżkę składającą się z zera lub więcej
katalogi pasujące do wzorca bla.
W skrócie: `**/' jest równoważne `(*/)#'; zauważ, że dlatego pasuje to do plików w
bieżący katalog i podkatalogi. Zatem:
ls (*/)#bar
or
ls **/bar
czy rekursywnie przeszukuje katalogi w poszukiwaniu plików o nazwie `bar' (potencjalnie włączając plik
`bar' w bieżącym katalogu). Ten formularz nie zawiera dowiązań symbolicznych; the
forma alternatywna `*** /' ma, ale poza tym jest identyczny. Żadne z nich nie może być
w połączeniu z innymi formami globowania w tym samym segmencie ścieżki; w takim przypadku `*'
operatorzy powracają do normalnego efektu.
Glob Kwalifikatory
Wzorce używane do generowania nazw plików mogą kończyć się listą kwalifikatorów zawartą w
zdanie wtrącone. Kwalifikatory określają, które nazwy plików pasują do podanego
wzorzec zostanie wstawiony na listę argumentów.
Jeśli opcja BARE_GLOB_QUAL jest ustawiony, wówczas końcowy zestaw nawiasów nie zawiera `|'
lub `(' znaki (lub `~' jeśli jest specjalny) jest traktowany jako zbiór kwalifikatorów glob. Kula
podwyrażenie, które normalnie byłoby traktowane jako kwalifikatory glob, na przykład `(^x)', może być
w tym przypadku należy je traktować jako część wzoru globu poprzez podwojenie nawiasów
produkcja `((^x))'.
Jeśli opcja EXTENDED_GLOB jest ustawiona, dostępna jest inna składnia kwalifikatorów glob,
mianowicie `(#Qx)' gdzie x jest dowolnym z tych samych kwalifikatorów globalnych, które są używane w innym formacie. The
kwalifikatory muszą nadal znajdować się na końcu wzorca. Jednak z tą składnią
wiele kwalifikatorów glob może być połączonych ze sobą. Są one traktowane jako logiczne AND
poszczególne zestawy flag. Ponadto, ponieważ składnia jest jednoznaczna, wyrażenie będzie
traktowane jako kwalifikatory glob, o ile zawarte w nich nawiasy są zrównoważone;
pojawienie się `|', '(' lub `~' nie neguje efektu. Pamiętaj, że odbędą się kwalifikacje
rozpoznawane w tej formie, nawet jeśli na końcu wzorca znajduje się sam kwalifikator glob,
na przykład `*(#Q*)(.)' rozpozna zwykłe pliki wykonywalne, jeśli ustawione są obie opcje;
jednakże ze względu na przejrzystość prawdopodobnie należy unikać składni mieszanej. Zauważ to
w warunkach przy użyciu `[[' tworzą obecność wyrażenia w nawiasach (#Q...)
na końcu łańcucha wskazuje, że należy wykonać masowanie; wyrażenie może
zawierać kwalifikatory glob, ale jest to również ważne, jeśli jest proste (#Q). To nie ma zastosowania
po prawej stronie operatorów dopasowania wzorca, ponieważ składnia jest już specjalna
znaczenie.
Kwalifikatorem może być dowolny z poniższych:
/ katalogi
F `pełne' (tzn. niepuste) katalogi. Należy pamiętać, że w odwrotnym sensie (^F) rozszerza się do
puste katalogi i wszystkie nie-katalogi. Używać (/^F) dla pustych katalogów.
. zwykłe pliki
@ linki symboliczne
= Gniazda
p nazwane potoki (FIFO)
* zwykłe pliki wykonywalne (0100 lub 0010 lub 0001)
% pliki urządzeń (specjalne znakowe lub blokowe)
%b blokować pliki specjalne
%c specjalne pliki znaków
r pliki czytelne dla właściciela (0400)
w pliki zapisywane przez właściciela (0200)
x pliki wykonywalne właściciela (0100)
A pliki do odczytu grupowego (0040)
I pliki do zapisu grupowego (0020)
E pliki wykonywalne grupowo (0010)
R pliki czytelne dla świata (0004)
W pliki do zapisu na całym świecie (0002)
X pliki wykonywalne świata (0001)
s pliki setuid (04000)
S pliki setgid (02000)
t pliki z lepkim bitem (01000)
fspecyfikacja pliki z dopasowanymi prawami dostępu specyfikacja, To specyfikacja opcjonalnie może być liczbą ósemkową
poprzedzone `=', '+' lub `-'. Jeśli żaden z tych znaków nie zostanie podany,
zachowanie jest takie samo jak w przypadku `='. Liczba ósemkowa opisuje, jakie bity trybu mają być
oczekiwany, jeśli zostanie połączony z `=', podana wartość musi odpowiadać trybom pliku
dokładnie, z `+', przynajmniej bity podanej liczby muszą być ustawione w
tryby plików i z rozszerzeniem `-', bity w liczbie nie mogą być ustawione. Podawanie `?'
zamiast cyfry ósemkowej w dowolnym miejscu liczby zapewnia odpowiednie bity
w trybach plików nie są zaznaczone, jest to przydatne tylko w połączeniu z `='.
Jeśli kwalifikator `f', po którym następuje dowolny inny znak aż do następnego
pasujący znak (`[', '{' i `<„mecz”.]', '}' i `>odpowiednio, dowolne
inny znak pasuje do samego siebie) jest traktowany jako lista oddzielona przecinkami podspecs.
Każdy podspec może być liczbą ósemkową, jak opisano powyżej, lub listą dowolnych
znaki `u', 'g', 'o' i `a', po którym następuje `=', '+' lub `-', następuje
przez listę dowolnych znaków `r', 'w', 'x', 's' i `t' lub cyfra ósemkowa.
Pierwsza lista znaków określa, które prawa dostępu mają być sprawdzane. Jeśli
`u', używane są dane właściciela pliku, jeśli `g' jest dane, te z
grupa jest sprawdzana, a `o' oznacza testowanie testów innych użytkowników, a `a' mówi
przetestować wszystkie trzy grupy. `=', '+' i `-' znowu mówi, jakie mają być tryby
zaznaczone i mają takie samo znaczenie, jak opisano dla pierwszego formularza powyżej. Drugi
lista znaków ostatecznie mówi, jakich praw dostępu należy się spodziewać: `r' dla
dostęp do odczytu, `w' dla dostępu do zapisu, `x', aby uzyskać prawo do wykonania pliku (lub do
przeszukaj katalog), `s' dla bitów setuid i setgid oraz `t'dla lepkich
trochę.
Zatem `*(f70?)' udostępnia pliki, dla których właściciel odczytał, zapisał i wykonał
zezwoleniem i do którego inni członkowie grupy nie mają żadnych praw, niezależnie od
uprawnienia dla innych użytkowników. Wzór `*(f-100)' daje wszystkie pliki, dla których
właściciel nie ma uprawnień do wykonywania, oraz `*(f:gu+w,o-rx:)' udostępnia pliki dla
którego właściciel i pozostali członkowie grupy mają przynajmniej uprawnienia do zapisu,
i dla których inni użytkownicy nie mają uprawnień do odczytu ani wykonywania.
eciąg
+cmd ciąg zostanie wykonany jako kod powłoki. Nazwa pliku zostanie uwzględniona w pliku
list wtedy i tylko wtedy, gdy kod zwraca status zerowy (zwykle status last
dowództwo).
W pierwszej formie pierwszy znak po `e' będzie używany jako separator
i wszystko aż do następnego pasującego separatora zostanie przyjęte jako ciąg; `[',
`{' i `<„mecz”.]', '}' i `>', odpowiednio, podczas gdy dowolny inny znak
pasuje do siebie. Należy pamiętać, że rozszerzenia muszą być cytowane w ciąg aby im zapobiec
przed rozwinięciem przed zakończeniem globowania. ciąg jest następnie wykonywany jako powłoka
kod. Sznurek globalny jest dołączany do tablicy zsh_eval_context czas trwania
egzekucyjny.
Podczas wykonywania ciąg nazwa aktualnie testowanego pliku jest dostępna w
parametr ODPOWIADAĆ; parametr można zmienić na ciąg znaków, do którego należy wstawić
listę zamiast oryginalnej nazwy pliku. Poza tym parametr odpowiadać może być
ustawiony na tablicę lub ciąg znaków, który zastępuje wartość ODPOWIADAĆ. Jeśli ustawione na
array, ta ostatnia jest wstawiana słowo po słowie do wiersza poleceń.
Załóżmy na przykład, że katalog zawiera pojedynczy plik `samotny'. A później
wyrażenie `*(e:'odpowiedź=(${ODPOWIEDŹ}{1,2})':)' spowoduje pojawienie się słów `samotny1' oraz
`samotny2', który należy wstawić do wiersza poleceń. Zwróć uwagę na cytat ciąg.
Formularz +cmd ma ten sam efekt, ale wokół nie pojawiają się żadne ograniczniki cmd. Zamiast,
cmd jest traktowany jako najdłuższy ciąg znaków następujący po + To jest
alfanumeryczne lub podkreślenie. Typowo cmd będzie nazwą funkcji powłoki
zawierający odpowiedni test. Na przykład,
nie() { [[ $ ODPOWIEDŹ -nie $NTREF ]] }
NTREF=refile
ls -l *(+nt)
wyświetla listę wszystkich plików w katalogu, które zostały zmodyfikowane później niż
refil.
ddev pliki na urządzeniu dev
l[-|+]ct
pliki posiadające liczbę linków mniejszą niż ct (-), Lepszy niż ct (+) lub równe ct
U pliki należące do efektywnego identyfikatora użytkownika
G pliki należące do efektywnego identyfikatora grupy
uid pliki należące do identyfikatora użytkownika id jeśli to jest liczba. W przeciwnym razie, id określa użytkownika
nazwa: znak po `u' zostanie potraktowane jako separator i ciąg znaków
pomiędzy nim a następnym pasującym separatorem zostanie potraktowana jako nazwa użytkownika. The
separatory początkowe `[', '{' i `<' dopasuj końcowe separatory `]', '}' i `>',
odpowiednio; każdy inny znak pasuje sam do siebie. Wybrane pliki to te
własnością tego użytkownika. Na przykład `u: fuj:' lub `ty [foo]' wybiera pliki należące do użytkownika
`bla'.
gid lubić uid ale z identyfikatorami lub nazwami grup
a[Mhm][-|+]n
pliki, do których uzyskano dokładnie dostęp n kilka dni temu. Pliki, do których uzyskano dostęp w ciągu ostatniego n dni są
wybrano przy użyciu wartości ujemnej dla n (-n). Pliki, do których uzyskano dostęp więcej niż n kilka dni temu
są wybierane pozytywnie n wartość (+n). Opcjonalne specyfikatory jednostek `M', 'w', 'h',
`m' lub `s' (np. `Ah5') spowodować, że kontrola będzie przeprowadzana z miesiącami (30 dni),
odpowiednio tygodnie, godziny, minuty lub sekundy zamiast dni. Wyraźne `d'
przez kilka dni jest również dozwolone.
Dowolna ułamkowa część różnicy między czasem dostępu a bieżącą częścią
w odpowiednich jednostkach jest ignorowane w porównaniu. Na przykład `przegapić
*(ah-5)' powtórzy pliki, do których uzyskano dostęp w ciągu ostatnich pięciu godzin, podczas gdy `przegapić *(ah+5)'
powtórzy pliki, do których uzyskano dostęp co najmniej sześć godzin temu, jako czasy ściśle między piątą
a sześć godzin traktuje się jako pięć godzin.
m[Mhm][-|+]n
podobnie jak kwalifikator dostępu do pliku, z tą różnicą, że wykorzystuje czas modyfikacji pliku.
c[Mhm][-|+]n
podobnie jak kwalifikator dostępu do pliku, z tą różnicą, że wykorzystuje czas zmiany i-węzła pliku.
L[+|-]n
plików mniej niż n bajty (-), więcej niż n bajty (+) lub dokładnie n bajtów długości.
Jeśli bezpośrednio po tej fladze następuje a rozmiar specyficzny `k' (`K'), `m' (`M') lub `p'
(`P') (np. `Łk-50') sprawdzanie odbywa się w oparciu o kilobajty, megabajty lub bloki
(z 512 bajtów). (W niektórych systemach dostępne są dodatkowe specyfikatory
gigabajty, `g' lub `G' i terabajty, `t' lub `T'.) Jeśli używany jest specyfikator rozmiaru a
plik jest uważany za „dokładnie” rozmiar, jeśli rozmiar pliku zaokrągla się w górę do następnej jednostki
jest równy rozmiarowi testowemu. Stąd `*(Lm1)' dopasowuje pliki od 1 bajtu do 1
Megabajt włącznie. Należy również pamiętać, że zestaw plików jest tylko „mniejszy niż” rozmiar testowy
zawiera pliki, które nie pasują do testu równości; stąd `*(Lm-1)'tylko mecze
pliki o zerowym rozmiarze.
^ neguje wszystkie następujące po nim kwalifikatory
- przełącza między działaniem kwalifikatorów na dowiązania symboliczne (domyślnie) a
pliki, na które wskazują
M ustawia MARK_DIRS opcja dla bieżącego wzoru
T dołącza końcowy znak kwalifikacyjny do nazw plików, analogicznie do LIST_TYPES
opcję dla bieżącego wzorca (overrides M)
N ustawia NULL_GLOB opcja dla bieżącego wzoru
D ustawia GLOB_DOTS opcja dla bieżącego wzoru
n ustawia NUMERIC_GLOB_SORT opcja dla bieżącego wzoru
Yn włącza tryb zwarciowy: wzór rozszerzy się maksymalnie n nazwy plików. Jeśli
ponad n dopasowania istnieją, tylko pierwsze n odpowiada kolejności przeglądania katalogów
zostanie rozważony.
Implikuje oN kiedy nie oc używany jest kwalifikator.
oc określa sposób sortowania nazw plików. Jeśli c is n są sortowane według
nazwa; Jeśli to jest L są sortowane w zależności od rozmiaru (długości) plików; Jeśli l
są sortowane według liczby linków; Jeśli a, mlub c są sortowane według czasu
odpowiednio o ostatnim dostępie, modyfikacji lub zmianie i-węzła; Jeśli d, pliki w
podkatalogi pojawiają się przed podkatalogami w bieżącym katalogu na każdym poziomie pliku
szukaj — najlepiej połączyć to z innymi kryteriami, na przykład `Odon' do sortowania
nazwy plików w tym samym katalogu; Jeśli N, nie jest wykonywane żadne sortowanie. Notatka
że a, m, c porównaj wiek z czasem obecnym, stąd imię w
lista jest najmłodszym plikiem. Należy również pamiętać, że modyfikatory ^ oraz - są używane, więc
`*(^-oL)' wyświetla listę wszystkich plików posortowaną malejąco według rozmiaru pliku,
podążając za dowolnymi dowiązaniami symbolicznymi. Chyba że oN jest używany, może być używanych wiele specyfikatorów zamówienia
nastąpić, aby rozwiązać więzi.
Domyślne sortowanie to n (według nazwy), chyba że Y używany jest kwalifikator glob, w którym
tak jest N (nieposortowany).
oe oraz o+ są przypadki szczególne; po każdym następuje kod powłoki, rozdzielony jak for
dotychczasowy e kwalifikator globu i + odpowiednio kwalifikator glob (patrz wyżej). Kod
jest wykonywana dla każdego dopasowanego pliku z parametrem ODPOWIADAĆ ustaw na nazwę
plik przy wpisie i globalsortowanie dołączony do zsh_eval_context. Kod powinien zostać zmodyfikowany
parametr ODPOWIADAĆ w jakiś sposób. Po powrocie używana jest wartość parametru
zamiast nazwy pliku jako ciągu znaków, według którego należy sortować. W przeciwieństwie do innych rodzajów
operatorzy, oe oraz o+ można powtórzyć, ale należy pamiętać, że maksymalna liczba sortowania
operatory dowolnego rodzaju, które mogą pojawić się w dowolnym wyrażeniu globowym, wynosi 12.
Oc jak `o', ale sortuje w kolejności malejącej; tj. `*(^oc)' jest tym samym co `*(Ok)' oraz
`*(^Oc)' jest tym samym co `*(oc)'; `Od' umieszcza pliki w bieżącym katalogu wcześniej
te w podkatalogach na każdym poziomie wyszukiwania.
[żebrać[,zakończenia]]
określa, które z pasujących nazw plików powinny znaleźć się na zwróconej liście.
Składnia jest taka sama jak w przypadku indeksów dolnych tablicy. żebrać i opcjonalne zakończenia może być
wyrażenia matematyczne. Podobnie jak w przypadku indeksowania parametrów, mogą one być ujemne
liczą się od ostatniego meczu wstecz. Np.: `*(-OL[1,3])' podaje listę
nazwy trzech największych plików.
Pciąg
ciąg będzie dodawane do każdego dopasowania globalnego jako osobne słowo. ciąg is
rozdzielane w taki sam sposób, jak argumenty metody e kwalifikator glob opisany powyżej.
Kwalifikator można powtórzyć; słowa są dodawane osobno, tak że
wynikowy wiersz poleceń zawiera słowa w tej samej kolejności, w jakiej zostały podane w pliku
lista kwalifikatorów globu.
Typowym zastosowaniem tej opcji jest dodanie opcji przed wszystkimi wystąpieniami pliku
nazwa; na przykład wzór `*(P:-f:)' generuje argumenty wiersza poleceń `-f
file1 -f file2 ...
Jeśli modyfikator ^ jest zatem aktywny ciąg zostanie dodany zamiast na początku.
Dodawanie i dodawanie odbywa się niezależnie, więc obu można używać na tym samym globie
wyrażenie; na przykład pisząc `*(P:foo:^P:bar:^P:baz:)', który produkuje
argumenty wiersza poleceń `bla baz file1 bar ...
Można połączyć więcej niż jedną z tych list, oddzielając je przecinkami. Cała lista się zgadza
jeśli przynajmniej jedna z podlist pasuje (są one `lub', kwalifikatory na podlistach
są „i”). Jednakże niektóre kwalifikatory wpływają na wszystkie wygenerowane mecze, niezależnie od
podlista, w której są podane. Są to kwalifikatory `M', 'T', 'N', 'D', 'n', 'o',
`O' i indeksy dolne podane w nawiasach (`[...]”).
Jeśli `:' pojawia się na liście kwalifikatorów, pozostała część wyrażenia w nawiasie to
interpretowane jako modyfikator (patrz sekcja „Modyfikatory” w sekcji „Historia
Ekspansja'). Każdy modyfikator musi być wprowadzony osobnym znakiem `:'. Należy również pamiętać, że
wynik po modyfikacji nie musi być istniejącym plikiem. Nazwa dowolnego istniejącego
po pliku może następować modyfikator w postaci `(:...)' nawet jeśli nie ma rzeczywistej nazwy pliku
generacja jest wykonywana, chociaż należy pamiętać, że obecność nawiasów powoduje
całe wyrażenie ma zostać poddane dowolnym globalnym opcjom dopasowywania wzorców, takim jak
NULL_GLOB. Zatem:
ls *(-/)
wyświetla listę wszystkich katalogów i dowiązań symbolicznych wskazujących na katalogi oraz
ls *(-@)
wyświetla listę wszystkich uszkodzonych dowiązań symbolicznych i
ls *(%W)
wyświetla listę wszystkich plików urządzeń możliwych do zapisu na całym świecie w bieżącym katalogu oraz
ls *(Sz,X)
wyświetla listę wszystkich plików w bieżącym katalogu, które można zapisywać lub wykonywać na całym świecie, oraz
przegapić /tmp/foo*(u0^@:t)
wyświetla nazwę bazową wszystkich plików będących własnością roota, zaczynającą się od ciągu znaków `bla' w / Tmp,
ignorowanie dowiązań symbolicznych i
ls *.*~(lex|analiza).[ch](^D^l1)
wyświetla listę wszystkich plików mających liczbę dowiązań równą jeden, których nazwy zawierają kropkę (ale nie te
zaczynając od kropki, ponieważ GLOB_DOTS jest wyraźnie wyłączony) z wyjątkiem lex.c, lex.h,
parse.c oraz parsować.h.
b*.pro(#q:s/pro/shmo/)(#q.:s/builtin/shmiltin/)
pokazuje, w jaki sposób modyfikatory dwukropków i inne kwalifikatory mogą być ze sobą łączone. The
zwykły kwalifikator `.' jest stosowany jako pierwszy, następnie modyfikatory dwukropka w kolejności od lewej do
Prawidłowy. Więc jeśli EXTENDED_GLOB jest ustawiony, a wzorzec bazowy pasuje do zwykłego pliku
wbudowany.pro, powłoka wydrukuje `shmiltin.shmo'.
Użyj zshexpn online, korzystając z usług onworks.net