Jest to polecenie zshmisc, 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Ę
zshmisc - wszystko i jeszcze trochę
PROSTY POLECENIA & RUROCIĄGI
A prosty komenda to sekwencja opcjonalnych przypisań parametrów, po której następuje
słowa oddzielone spacją, z opcjonalnymi przekierowaniami przeplatanymi. Dla opisu
zadanie, patrz początek zszparam(1).
Pierwsze słowo to polecenie, które ma zostać wykonane, a pozostałe słowa, jeśli istnieją, to polecenie
argumenty polecenia. Jeśli zostanie podana nazwa polecenia, przypisania parametrów zostaną zmodyfikowane
środowisko polecenia podczas jego wykonywania. Wartością prostego polecenia jest jego
status wyjścia lub 128 plus numer sygnału, jeśli jest zakończony sygnałem. Na przykład,
przegapić bla
to proste polecenie z argumentami.
A rurociąg jest albo prostym poleceniem, albo sekwencją dwóch lub więcej prostych poleceń, gdzie
każde polecenie jest oddzielone od następnego znakiem `|' lub `|&'. Gdzie polecenia są oddzielone przez
`|', standardowe wyjście pierwszego polecenia jest połączone ze standardowym wejściem
Następny. `|&' jest skrótem od `2> & 1 |', który łączy zarówno standardowe wyjście, jak i wyjście
błąd standardowy polecenia na standardowe wejście następnego. Wartość rurociągu
jest wartością ostatniego polecenia, chyba że potok jest poprzedzony znakiem `!' w takim przypadku
wartość jest logiczną odwrotnością wartości ostatniego polecenia. Na przykład,
przegapić bla | sed 's/foo/bar/'
to potok, w którym wyjście (`bla' plus znak nowej linii) pierwszego polecenia zostanie przekazany
na wejście drugiego.
Jeśli potok jest poprzedzony znakiem `koproc', jest wykonywany jako koproces; jest rura dwukierunkowa
ustanowione pomiędzy nim a powłoką macierzystą. Powłoka może czytać i zapisywać do
koproces za pomocą `>&str' i `<&str' operatory przekierowania lub z ` -p' oraz
`czytać -p'. Potok nie może być poprzedzony obydwoma znakami `koproc' i `!'. Jeśli kontrola pracy jest
aktywny, koproces może być traktowany inaczej niż wejście i wyjście jak zwykle
praca w tle.
A podlista jest albo pojedynczym rurociągiem, albo sekwencją dwóch lub więcej rurociągów oddzielonych od siebie
`&&' lub `||'. Jeśli dwa potoki są oddzielone znakiem `&&', wykonywany jest drugi potok
tylko jeśli pierwszy się powiedzie (zwraca status zerowy). Jeśli dwa rurociągi są oddzielone przez
`||', drugi jest wykonywany tylko wtedy, gdy pierwszy się nie powiedzie (zwraca status różny od zera). Obydwa
operatory mają równy priorytet i pozostają łączne. Wartość podlisty to
wartość ostatniego wykonanego potoku. Na przykład,
dmesg | grep panika && tak
to podlista składająca się z dwóch potoków, drugi to proste polecenie, które będzie
wykonywane wtedy i tylko wtedy, gdy grep polecenie zwraca stan zerowy. Jeśli nie, wartość
podlisty to ten zwracany status, w przeciwnym razie jest to status zwracany przez (prawie
na pewno zero).
A podstęp jest sekwencją zera lub większej liczby podlist, w której każda podlista jest zakończona znakiem `;',
`&', '&|', '&!' lub znak nowej linii. Ten terminator można opcjonalnie pominąć w ostatnim
podlista na liście, gdy lista pojawia się jako złożone polecenie wewnątrz `(...)' lub `{...}'.
Kiedy podlista jest zakończona znakiem `;' lub znak nowej linii, powłoka czeka, aż zakończy się wcześniej
wykonanie następnej podlisty. Jeśli podlista jest zakończona znakiem `&', '&|' lub `&!', muszla
wykonuje w tle ostatni znajdujący się w nim potok i nie czeka na jego zakończenie
(zwróć uwagę na różnicę w stosunku do innych powłok, które wykonują całą podlistę w tle).
Potok działający w tle zwraca stan zero.
Mówiąc bardziej ogólnie, listę można postrzegać jako zestaw dowolnych poleceń powłoki, w tym
złożone polecenia poniżej; jest to sugerowane wszędzie tam, gdzie później pojawia się słowo „lista”.
opisy. Na przykład polecenia w funkcji powłoki tworzą specjalny rodzaj listy.
ROZKAZ MODYFIKATORY
Proste polecenie może być poprzedzone a rozkaz modyfikator, co zmieni sposób
polecenie jest interpretowane. Te modyfikatory są poleceniami wbudowanymi w powłokę, z wyjątkiem
niepoprawne co jest słowem zastrzeżonym.
- Polecenie jest wykonywane z `-' poprzedzał to argument[0] ciąg.
wbudowany
Słowo polecenia jest nazwą wbudowanego polecenia, a nie powłoki
funkcję lub polecenie zewnętrzne.
komenda [ -pvV ]
Za słowo polecenia uważa się nazwę polecenia zewnętrznego, a nie „a”.
funkcja powłoki lub wbudowana. Jeśli POSIX_BUILTINS opcja jest ustawiona, wbudowane będą
również zostaną wykonane, ale pewne ich specjalne właściwości zostaną pominięte. The -p flaga
powoduje przeszukiwanie ścieżki domyślnej zamiast ścieżki w $ ścieżka, Z -v flaga,
komenda jest podobne do skąd i z -V, jest to równoważne skąd -v.
exec [ -kl ] [ -a argv0 ]
Zamiast bieżącego polecenia uruchamiane jest następujące polecenie wraz z dowolnymi argumentami
procesem, a nie podprocesem. Powłoka nie rozwidla się i jest wymieniana.
Powłoka nie wywołuje TRAPEXITani nie jest źródłem wyloguj się akta. Opcje
zapewniają kompatybilność z innymi powłokami.
-c opcja czyści środowisko.
-l opcja jest równoważna z - modyfikator polecenia wstępnego, aby potraktować zastąpienie
polecenie jako powłoka logowania; polecenie jest wykonywane za pomocą a - dołączone do niego argument[0]
strunowy. Ta flaga nie ma żadnego efektu, jeśli jest używana razem z -a opcja.
-a Opcja służy do jawnego określenia argument[0] ciąg znaków (nazwa pliku
polecenie widziane przez sam proces), które ma być użyte przez polecenie zamiany i jest
bezpośrednio równoważne z ustawieniem wartości dla ARGV0 zmienna środowiskowa.
niepoprawne
Korekta pisowni nie jest wykonywana w przypadku żadnego ze słów. To musi pojawić się przed jakimkolwiek
inny modyfikator polecenia wstępnego, ponieważ jest on interpretowany bezpośrednio przed jakimkolwiek analizowaniem
zrobione. Nie ma to żadnego efektu w powłokach nieinteraktywnych.
noglob Generowanie nazwy pliku (globbing) nie jest wykonywane na żadnym ze słów.
KOMPLEKS POLECENIA
A kompleks komenda w zsh jest jednym z następujących:
if podstęp następnie podstęp [ Elif podstęp następnie podstęp ] ... [ więcej podstęp ] fi
if podstęp jest wykonywany i jeśli zwróci zerowy status wyjścia, funkcja następnie podstęp is
wykonany. W przeciwnym razie Elif podstęp jest wykonywany i jeśli jego status wynosi zero, funkcja następnie
podstęp jest wykonywany. Jeśli każdy Elif podstęp zwraca stan niezerowy, więcej podstęp is
wykonany.
dla Nazwa ... [ in słowo ...] semestr do podstęp zrobić
gdzie semestr jest co najmniej jednym znakiem nowej linii lub ;. Rozwiń listę słowos i ustaw
parametr Nazwa do każdego z nich po kolei, wykonując podstęp za każdym razem. Jeśli in słowo
zostanie pominięty, użyj parametrów pozycyjnych zamiast słowos.
Więcej niż jeden parametr Nazwa może pojawić się przed listą słowos. Gdyby N Nazwas są
dany, a następnie przy każdym wykonaniu pętli następny N słowos są przypisane do
odpowiednie parametry. Jeśli jest ich więcej Nazwas niż pozostałe słowos
pozostałe parametry są ustawiane na pusty ciąg. Wykonanie pętli kończy się
gdy nie ma już reszty słowo przypisać do pierwszego Nazwa. Jest to możliwe
dla in wystąpić jako pierwszy Nazwa na liście, w przeciwnym razie będzie to traktowane jako oznaczenie
koniec listy.
dla (( [wyr1] ; [wyr2] ; [wyr3] )) do podstęp zrobić
Wyrażenie arytmetyczne wyr1 jest obliczany jako pierwszy (zobacz sekcję „Arytmetyka
Ocena'). Wyrażenie arytmetyczne wyr2 jest wielokrotnie oceniany, aż do osiągnięcia tego celu
ma wartość zero, a gdy jest różna od zera, podstęp jest wykonywane, a wyrażenie arytmetyczne
wyr3 oceniane. Jeśli którekolwiek wyrażenie zostanie pominięte, zachowuje się ono tak, jakby zostało poddane ocenie
do 1.
jednocześnie podstęp do podstęp zrobić
Wykonaj do podstęp dopóki jednocześnie podstęp zwraca zerowy status wyjścia.
aż do podstęp do podstęp zrobić
Wykonaj do podstęp tak długo jak aż do podstęp zwraca niezerowy status wyjścia.
powtarzać słowo do podstęp zrobić
słowo jest rozwijany i traktowany jako wyrażenie arytmetyczne, którego wynikiem musi być a
numer n. podstęp jest następnie wykonywany n razy.
powtarzać składnia jest domyślnie wyłączona, gdy powłoka uruchamia się w trybie emulacji
kolejna skorupa. Można to włączyć za pomocą polecenia `umożliwiać -r powtarzać'
walizka słowo in [[(] wzorzec [ | wzorzec ] ... ) podstęp (;;|;&|;|)] ... to C
Wykonaj podstęp związany z pierwszym wzorzec to pasuje słowo, Jeśli w ogóle. The
forma wzorców jest taka sama, jak ta używana do generowania nazw plików. Zobacz
sekcja `Generowanie nazwy pliku'.
Należy ponadto zauważyć, że chyba że SH_GLOB opcja jest ustawiona, cały wzór z
alternatywy są traktowane przez powłokę jako równoważne grupie znajdujących się w niej wzorców
nawiasy, chociaż wokół nawiasów i pionu mogą pojawić się białe znaki
pasek i zostaną usunięte ze wzoru w tych punktach. Może pojawić się biała przestrzeń
w innym miejscu wzoru; to nie jest rozebrane. Jeśli SH_GLOB opcja jest ustawiona, więc
że nawias otwierający można jednoznacznie potraktować jako część przypadku
składni, wyrażenie jest rozdzielane na osobne słowa, które są traktowane jako
ścisłe alternatywy (jak w innych powłokach).
Jeśli podstęp który jest wykonywany, kończy się ;& zamiast ;;, następujące
lista jest również wykonywana. Reguła terminatora poniższej listy ;;, ;& or
;| jest stosowany, chyba że to C został osiągnięty.
Jeśli podstęp który jest wykonywany, kończy się ;| powłoka kontynuuje skanowanie
wzorzecszuka następnego dopasowania i wykonuje odpowiednie podstępi aplikowanie
reguła dla odpowiedniego terminatora ;;, ;& or ;|, Należy pamiętać, że słowo nie jest
ponownie rozszerzony; wszystkie obowiązujące wzorzecsą testowane z tym samym słowo.
wybierać Nazwa [ in słowo ... semestr ] do podstęp zrobić
gdzie semestr to jeden lub więcej znaków nowej linii lub ; zakończyć słowoS. Wydrukuj zestaw
słowos, każdy poprzedzony liczbą. Jeśli in słowo zostanie pominięty, użyj funkcji pozycyjnej
parametry. ten MONIT3 zostanie wyświetlony monit i wczytana zostanie linia z edytora linii
jeśli powłoka jest interaktywna i jest aktywna, lub standardowe wejście. Jeśli to
wiersz składa się z numeru jednego z wymienionych słowos, następnie parametr Nazwa is
ustawiony na słowo odpowiadający temu numerowi. Jeśli ta linia jest pusta, zaznaczenie
lista zostanie wydrukowana ponownie. W przeciwnym razie wartość parametru Nazwa jest ustawiona na wartość null.
W parametrze zapisywana jest zawartość linii odczytanej ze standardowego wejścia ODPOWIADAĆ.
podstęp jest wykonywany dla każdego wyboru, aż do napotkania przerwy lub końca pliku.
( podstęp )
Wykonać podstęp w podpowłoce. Pułapki zastawione przez pułapka wbudowane są resetowane do swoich
wartości domyślne podczas wykonywania podstęp.
{ podstęp }
Wykonać podstęp.
{ lista prób } zawsze { lista zawsze }
Najpierw wykonaj lista prób. Niezależnie od błędów lub złamać, kontynuowaćlub powrót
polecenia napotkane w środku lista prób, wykonać lista zawsze. Zatem egzekucja
trwa od wyniku wykonania lista prób; innymi słowy, każdy błąd,
or złamać, kontynuowaćlub powrót polecenie jest traktowane w normalny sposób, jakby
lista zawsze nie byli obecni. Te dwa fragmenty kodu nazywane są plikiem `try
blokuj” i „zawsze blokuj”.
Opcjonalne znaki nowej linii lub średniki mogą pojawić się po zawsze; zauważ jednak, że
oni mogą nie pojawiają się pomiędzy poprzedzającym nawiasem zamykającym a zawsze.
„Błąd” w tym kontekście to stan taki jak błąd składniowy, który powoduje
Shell, aby przerwać wykonywanie bieżącej funkcji, skryptu lub listy. Błędy składniowe
napotkane podczas analizowania kodu przez powłokę, nie powodują lista zawsze być
wykonany. Na przykład błędnie skonstruowany if zablokować w lista prób Mogłoby spowodować
przerwanie powłoki podczas analizowania, więc tak lista zawsze nie zostanie wykonany, podczas gdy
błędne podstawienie, np ${*foo*} spowodowałoby błąd wykonania, after
który lista zawsze zostanie wykonany.
Stan błędu można sprawdzić i zresetować za pomocą specjalnej zmiennej całkowitej
TRY_BLOCK_ERROR. Na zewnątrz lista zawsze wartość nie ma znaczenia, ale tak jest
zainicjowany do -1. Wewnątrz lista zawsze, wartość wynosi 1, jeśli wystąpił błąd w pliku
lista prób, w przeciwnym razie 0. Jeśli TRY_BLOCK_ERROR jest ustawiony na 0 podczas lista zawsze, błąd
stan spowodowany przez lista prób zostanie zresetowany, a wykonywanie powłoki będzie kontynuowane normalnie
po zakończeniu lista zawsze. Zmiana wartości w trakcie lista prób nie jest przydatny
(chyba że stanowi to część załącznika zawsze blok).
Niezależnie od TRY_BLOCK_ERROR, po zakończeniu lista zawsze normalny stan powłoki
$? to wartość zwrócona z lista prób. To będzie niezerowe, jeśli istnieje
błąd, nawet jeśli TRY_BLOCK_ERROR została ustawiona na zero.
Poniższy kod wykonuje podany kod, ignorując wszelkie błędy, które powoduje. To jest
alternatywa dla zwykłej konwencji ochrony kodu poprzez wykonanie go w formacie a
podpowłoka.
{
# kod który może przyczyna an błąd
} zawsze {
# Niniejsze kod is wykonany bez względu na of dotychczasowy Błąd.
(( TRY_BLOCK_ERROR = 0 ))
}
# błąd warunek ma być zresetować.
An wyjście polecenie (lub a powrót polecenie wykonywane na najbardziej zewnętrznym poziomie funkcji a
skrypt) napotkany w lista prób robi nie spowodować wykonanie lista zawsze.
Zamiast tego powłoka kończy działanie natychmiast po jakimkolwiek EXIT pułapka została wykonana.
funkcjonować słowo ... [ () ] [ semestr ] { podstęp }
słowo ... () [ semestr ] { podstęp }
słowo ... () [ semestr ] komenda
gdzie semestr to jeden lub więcej znaków nowej linii lub ;. Zdefiniuj funkcję, do której odwołuje się
którykolwiek z słowo. Zwykle tylko jeden słowo jest zapewniony; wiele słowos zwykle
przydatne tylko do zastawiania pułapek. Ciałem funkcji jest podstęp między {
oraz }. Zobacz sekcję „Funkcje”.
Jeśli opcja SH_GLOB jest ustawiony na kompatybilność z innymi powłokami, a następnie białe znaki
może pojawić się pomiędzy lewym i prawym nawiasem, jeśli występuje pojedynczy słowo;
w przeciwnym razie nawiasy będą traktowane jako tworzące wzór globalny
walizka.
W dowolnym z powyższych formularzy przekierowanie może pojawić się poza treścią funkcji, np
przykład
funkcja() { ... } 2> & 1
Przekierowanie jest przechowywane z funkcją i stosowane zawsze, gdy funkcja jest dostępna
wykonany. Wszelkie zmienne w przekierowaniu są rozwijane w punkcie funkcji
jest wykonywany, ale poza zakresem funkcji.
czas [ rurociąg ]
rurociąg jest wykonywany, a statystyki taktowania są raportowane w oparciu o błąd standardowy
w formie określonej przez CZAS FMT parametr. Jeśli rurociąg został pominięty, wydrukuj
statystyki dotyczące procesu powłoki i jego dzieci.
[[ exp ]]
Oblicza wyrażenie warunkowe exp i zwróć zerowy status wyjścia, jeśli tak jest
PRAWDA. Zobacz sekcję `Wyrażenia warunkowe', aby zapoznać się z opisem exp.
ALTERNATE FORMULARZE DLA KOMPLEKS POLECENIA
Wiele złożonych poleceń Zsh ma alternatywne formy. Są one niestandardowe i takie są
prawdopodobnie nie będzie oczywiste nawet dla doświadczonych programistów powłoki; nie należy ich używać
wszędzie tam, gdzie problemem jest przenośność kodu powłoki.
Poniższe krótkie wersje działają tylko wtedy, gdy podlista ma postać `{ podstęp }' lub jeśli
SHORT_LOOPS opcja jest ustawiona. Dla if, jednocześnie oraz aż do polecenia, w obu przypadkach
testowa część pętli musi być również odpowiednio odgraniczona, np. przez `[[ ... ]]' lub `(( ...
))', w przeciwnym razie koniec testu nie zostanie rozpoznany. Dla dla, powtarzać, walizka oraz
wybierać polecenia nie jest konieczna taka specjalna forma argumentów, ale inna
warunek (specjalna forma podlista lub użycie SHORT_LOOPS opcja) nadal obowiązuje.
if podstęp { podstęp } [ Elif podstęp { podstęp } ] ... [ więcej { podstęp } ]
Alternatywna forma if. Przepisy to oznaczają
if [[ -o ignoruj nawiasy klamrowe ]] {
tak
}
działa, ale
if prawdziwy { # Czy nie praca!
tak
}
robi nie, ponieważ test nie jest odpowiednio ograniczony.
if podstęp podlista
Krótka forma zastępcy if. Te same ograniczenia dotyczące formy podstęp zastosować
co do poprzedniej formy.
dla Nazwa ... ( słowo ... ) podlista
Krótka forma dla.
dla Nazwa ... [ in słowo ...] semestr podlista
gdzie semestr jest co najmniej jednym znakiem nowej linii lub ;. Kolejna krótka forma dla.
dla (( [wyr1] ; [wyr2] ; [wyr3] )) podlista
Krótka forma arytmetyki dla dowództwo.
foreach Nazwa ... ( słowo ... ) podstęp zakończenia
Inna forma dla.
jednocześnie podstęp { podstęp }
Alternatywna forma jednocześnie. Zwróć uwagę na ograniczenia dotyczące formy podstęp wzmiankowany
powyżej.
aż do podstęp { podstęp }
Alternatywna forma aż do. Zwróć uwagę na ograniczenia dotyczące formy podstęp wzmiankowany
powyżej.
powtarzać słowo podlista
Jest to krótka forma powtarzać.
walizka słowo { [[(] wzorzec [ | wzorzec ] ... ) podstęp (;;|;&|;|)] ... }
Alternatywna forma walizka.
wybierać Nazwa [ in słowo ... semestr ] podlista
gdzie semestr jest co najmniej jednym znakiem nowej linii lub ;. Krótka forma wybierać.
ZAREZERWOWANY SŁOWA
Następujące słowa są uznawane za słowa zastrzeżone, jeśli są użyte jako pierwsze słowo a
polecenie, chyba że jest cytowane lub wyłączone przy użyciu wyłączyć -r:
do zrobić to C następnie Elif więcej fi dla walizka if jednocześnie funkcjonować powtarzać czas aż do wybierać koproc
niepoprawne foreach zakończenia ! [[ { } ogłosić eksport unosić się liczba całkowita miejscowy tylko czytać skład
Dodatkowo `}' jest rozpoznawany w dowolnej pozycji, jeśli żaden z nich IGNORE_BRACES opcja nor
dotychczasowy IGNORE_CLOSE_BRACES opcja jest ustawiona.
BŁĘDY
Niektóre błędy są traktowane przez powłokę jako krytyczne: w powłoce interaktywnej są one przyczyną
control, aby powrócić do wiersza poleceń, a w nieinteraktywnej powłoce powodują uruchomienie powłoki
zostać aborcją. W starszych wersjach Zsh działałaby nieinteraktywna powłoka uruchamiająca skrypt
nie przerywa całkowicie, ale wznawia wykonywanie przy następnym poleceniu do odczytania z pliku
skrypt, pomijając pozostałe funkcje lub konstrukcje powłoki, takie jak pętle lub
warunki; to nieco nielogiczne zachowanie można naprawić, ustawiając tę opcję
CONTINUE_ON_ERROR.
Błędy krytyczne znalezione w nieinteraktywnych powłokach obejmują:
· Nie udało się przeanalizować opcji powłoki przekazanych podczas wywoływania powłoki
· Brak zmiany opcji za pomocą zestaw wbudowany
· Błędy analizy wszelkiego rodzaju, w tym błędy w analizie wyrażeń matematycznych
· Błędy przy ustawianiu lub modyfikowaniu zachowania zmiennych skład, miejscowy, ogłosić, eksport,
liczba całkowita, unosić się
· Wykonanie nieprawidłowo umiejscowionych struktur sterowania pętlą (kontynuować, złamać)
· Próbuje użyć wyrażeń regularnych bez dostępnego modułu wyrażeń regularnych
· Niedozwolone operacje, gdy OGRANICZONY opcje są ustawione
· Nieutworzenie rury potrzebnej do rurociągu
· Nie udało się utworzyć multio
· Nie udało się automatycznie załadować modułu potrzebnego dla zadeklarowanej funkcji powłoki
· Błędy przy tworzeniu podstawień poleceń lub procesów
· Błędy składniowe w kwalifikatorach globu
· Błędy generowania plików, jeśli nie zostały wykryte przez tę opcję ZŁY_WZÓR
· Wszystkie złe wzorce używane do dopasowywania instrukcji case
· Błędy podczas generowania plików, jeśli nie są spowodowane przez NIE PASUJE lub podobne opcje
· Wszystkie błędy generowania plików, w których wzór został użyty do stworzenia multio
· Błędy pamięci wykryte przez powłokę
· Nieprawidłowe indeksy dolne zmiennych powłoki
· Próbuje przypisać zmienne tylko do odczytu
· Błędy logiczne ze zmiennymi, np. przypisanie do niewłaściwego typu
· Użycie nieprawidłowych nazw zmiennych
· Błędy w składni podstawienia zmiennych
· Brak konwersji znaków w $'...' wyrażeń
Jeśli POSIX_BUILTINS opcja jest ustawiona, więcej błędów związanych z wbudowanymi poleceniami powłoki
są traktowane jako śmiertelne, zgodnie ze standardem POSIX.
KOMENTARZE
W powłokach nieinteraktywnych lub w powłokach interaktywnych z INTERAKTYWNE_KOMENTARZE opcja
set, słowo rozpoczynające się od trzeciego znaku histchary parametr (`#' domyślnie)
powoduje, że to słowo i wszystkie następujące po nim znaki aż do nowej linii zostaną zignorowane.
ALIASOWANIE
Każdy uprawniony słowo na wejściu powłoki sprawdzane jest, czy zdefiniowano alias
To. Jeśli tak, zostaje on zastąpiony tekstem aliasu, jeśli znajduje się on w pozycji dowodzenia (jeśli jest to
może być pierwszym słowem prostego polecenia) lub jeśli alias jest globalny. Jeśli
tekst zastępczy kończy się spacją, następne słowo na wejściu powłoki jest zawsze odpowiednie
w celu rozszerzenia aliasów. Alias jest definiowany przy użyciu metody alias wbudowany; światowy
Aliasy można definiować za pomocą metody -g opcja tego wbudowanego.
A słowo jest zdefiniowany jako:
· Dowolny zwykły ciąg lub wzór globu
· Dowolny ciąg znaków w cudzysłowie, przy użyciu dowolnej metody cytowania (pamiętaj, że cudzysłowy muszą być częścią
definicja aliasu, aby to się kwalifikowało)
· Wszelkie odniesienia do parametrów lub podstawienia poleceń
· Dowolna seria powyższych, połączona bez białych znaków i innych tokenów
między nimi
· Dowolne słowo zastrzeżone (walizka, do, więcejEtc.)
· W przypadku aliasingu globalnego, dowolnego separatora poleceń, dowolnego operatora przekierowania i `(' lub
`)', gdy nie jest częścią wzorca globu
Obecnie nie jest możliwe aliasowanie `((' token wprowadzający arytmetykę
wyrażeń, ponieważ dopóki nie zostanie przeanalizowana pełna instrukcja, nie można jej rozróżnić
z dwóch kolejnych `(' tokeny wprowadzające zagnieżdżone podpowłoki.
Kiedy POSIX_ALIASES jest ustawiona, do aliasowania kwalifikują się tylko zwykłe ciągi znaków bez cudzysłowu. The
alias wbudowany nie odrzuca nieodpowiednich aliasów, ale nie są one rozwijane.
Ekspansja aliasów odbywa się na wejściu powłoki przed jakimkolwiek innym rozwinięciem z wyjątkiem historii
ekspansja. Dlatego też, jeśli dla słowa zdefiniowano alias bla, może być rozszerzenie aliasu
unikać, cytując część słowa, np \bla. Każda forma cytowania działa, chociaż tam jest
nic nie stoi na przeszkodzie zdefiniowaniu aliasu dla cytowanego formularza, takiego jak \bla , jak również.
Ponadto, jeśli separator taki jak && jest aliasem, \&& zamienia się w dwa żetony \& oraz &, każdy
z których można było aliasować oddzielnie. Podobnie dla \<, \>|, itp.
Do użycia z zakończeniem, które usuwa początkowy ukośnik odwrotny, po którym następuje znak
to nie jest niczym specjalnym, wygodniej będzie zacytować słowo, zaczynając od pojedynczego
zacytować, tj 'bla; zakończenie automatycznie doda końcowy pojedynczy cudzysłów.
Często spotykany problem z aliasami ilustruje następujący kod:
alias echobar='echo bar'; echobar
Spowoduje to wydrukowanie komunikatu, że polecenie echobar nie znaleziono. Dzieje się tak, ponieważ
aliasy są rozwijane podczas wczytywania kodu; cały wiersz jest czytany za jednym razem, więc tak
jeśli chodzi o komunikację i motywację echobar zostanie wykonany, jest już za późno na rozwinięcie nowo zdefiniowanego aliasu. To często
problem w skryptach powłoki, funkcjach i kodzie wykonywanym za pomocą `źródło' lub `.'.
W związku z tym w kodzie nieinteraktywnym zaleca się używanie funkcji zamiast aliasów.
Zwróć także uwagę na nieprzydatną interakcję aliasów i definicji funkcji:
alias func='noglob Funkcjonować
funkcja() {
przegapić Do coś w $*
}
Ponieważ aliasy są rozwinięte w definicjach funkcji, powoduje to wykonanie następującego polecenia
być straconym:
noglob funkcja() {
przegapić Do coś w $*
}
co definiuje noglob jak również funkcjonować jako funkcje z danym ciałem. Uniknąć tego,
albo podaj nazwę funkcjonować lub użyj alternatywnego formularza definicji funkcji `funkcjonować
funkcjonować'. Zapewnienie zdefiniowania aliasu po uruchomieniu funkcji, ale jest problematyczne, jeśli
fragment kodu może zostać wykonany ponownie.
CYTOWANIE
Może być postać zacytowany (to znaczy samoistniejącym się), poprzedzając go znakiem `\'.
`\', po którym następuje znak nowej linii, jest ignorowany.
Ciąg znaków zawarty pomiędzy `$'' i `'' jest przetwarzane w taki sam sposób, jak argumenty łańcuchowe
ukończenia wbudowany, a wynikowy ciąg znaków jest uważany za całkowicie cytowany. A
dosłownie `'Znak ' można włączyć do ciągu za pomocą `\'' ucieczka.
Wszystkie znaki ujęte w parę pojedynczych cudzysłowów (''), który nie jest poprzedzony znakiem `$'
są cytowane. Pojedynczy cudzysłów nie może pojawić się w pojedynczym cudzysłowie, chyba że opcja jest zaznaczona RC_CYTAT
jest ustawiona, w takim przypadku para pojedynczych cudzysłowów zostaje zamieniona na pojedynczy cudzysłów. Dla
przykład,
'' ''
nie wyświetla niczego poza znakiem nowej linii if RC_CYTAT nie jest ustawiony, ale jeśli jest, to jeden pojedynczy cudzysłów
jest ustawiona.
Wewnątrz podwójnych cudzysłowów (""), następuje podstawienie parametrów i poleceń, oraz `\– cytuje
znaki `\', '`', '"' i `$'.
PRZEKIEROWANIE
Jeśli po poleceniu następuje & i kontrola zadań nie jest aktywna, wówczas jest to standard domyślny
danymi wejściowymi polecenia jest pusty plik / dev / null. W przeciwnym razie środowisko dla
wykonanie polecenia zawiera deskryptory plików wywołującej powłoki, zmodyfikowane przez
specyfikacje wejścia/wyjścia.
Poniższe mogą pojawić się w dowolnym miejscu prostego polecenia lub mogą poprzedzać lub następować po kompleksie
Komenda. Ekspansja następuje wcześniej słowo or cyfra jest używany z wyjątkiem przypadków opisanych poniżej. Jeśli
wynik podstawienia na słowo tworzy więcej niż jedną nazwę pliku, dla którego następuje przekierowanie
po kolei każda oddzielna nazwa pliku.
< słowo Otwórz plik słowo do odczytu jako standardowe wejście.
<> słowo
Otwórz plik słowo do odczytu i zapisu jako standardowe wejście. Jeśli plik nie
istnieje, po czym zostaje stworzony.
> słowo Otwórz plik słowo do zapisu na standardowe wyjście. Jeśli plik nie istnieje, to tak
jest tworzone. Jeśli plik istnieje i SPRAĆ opcja jest nieustawiona, powoduje to
błąd; w przeciwnym razie jest obcinany do zerowej długości.
>| słowo
>! słowo
Taki sam jak >, z tą różnicą, że plik jest obcinany do zerowej długości, jeśli istnieje, nawet jeśli
SPRAĆ jest rozbrojony.
>> słowo
Otwórz plik słowo do zapisu w trybie dołączania jako standardowe wyjście. Jeśli plik nie
istnieje i SPRAĆ opcja jest odznaczona, powoduje to błąd; w przeciwnym razie plik
jest tworzony.
>>| słowo
>>! słowo
Taki sam jak >>, z tą różnicą, że plik jest tworzony, jeśli nie istnieje, nawet jeśli SPRAĆ
jest rozbrojony.
<<[-] słowo
Dane wejściowe powłoki są odczytywane do linii, która jest taka sama jak słowo, lub do
koniec pliku. Brak rozwijania parametrów, podstawiania poleceń i generowania nazw plików
jest wykonywany w dniu słowo. Powstały dokument, tzw tutaj-dokument, staje się
standardowe wejście.
Jeśli jakikolwiek znak słowo jest cytowany w pojedynczym lub podwójnym cudzysłowie lub `\', NIE
interpretacja opiera się na znakach dokumentu. W przeciwnym razie parametr
i następuje podstawienie poleceń, `\', po którym następuje znak nowej linii, zostaje usunięty, oraz `\' musieć
być używany do cytowania znaków `\', '$', '`' i pierwszy znak słowo.
Należy pamiętać, że słowo sam w sobie nie ulega ekspansji powłokowej. Cytaty wsteczne w słowo nie
mieć swój zwykły skutek; zamiast tego zachowują się podobnie do podwójnych cudzysłowów, z tą różnicą, że
że same cudzysłowy są przekazywane bez zmian. (Ta informacja jest
podane w celu zapewnienia kompletności i nie zaleca się stosowania cudzysłowów.) Cytaty
w formie $'...' mają swój standardowy efekt rozwijania odniesień z ukośnikiem odwrotnym
do znaków specjalnych.
If <<- jest używany, wówczas wszystkie wiodące tabulatory są usuwane słowo i z dokumentu.
<< słowo
Wykonaj rozwinięcie powłoki włączone słowo i przekaż wynik na standardowe wejście. To jest
znany jako tutaj-string. Porównaj użycie słowo w powyższych dokumentach, gdzie
słowo nie ulega ekspansji powłokowej.
<& numer
>& numer
Standardowe wejście/wyjście jest powielane z deskryptora pliku numer (Patrz dup2(2)).
<& -
>& - Zamknij standardowe wejście/wyjście.
<& p
>& p Dane wejściowe/wyjściowe z/do koprocesu są przenoszone do standardowego wejścia/wyjścia.
>& słowo
&> słowo
(Z wyjątkiem sytuacji, gdy `>& słowo' pasuje do jednej z powyższych składni; `&>zawsze można użyć
aby uniknąć tej dwuznaczności.) Przekierowuje zarówno standardowe wyjście, jak i standardowe wyjście błędów (file
deskryptor 2) w sposób `> słowo'. Zauważ, że tak jest nie mieć to samo
efekt jako `> słowo 2> & 1' w obecności multios (patrz sekcja poniżej).
>&| słowo
>&! słowo
&>| słowo
&>! słowo
Przekierowuje zarówno standardowe wyjście, jak i standardowy błąd (deskryptor pliku 2) w ten sposób
z `>| słowo'.
>>& słowo
&>> słowo
Przekierowuje zarówno standardowe wyjście, jak i standardowy błąd (deskryptor pliku 2) w ten sposób
z `>> słowo'.
>>&| słowo
>>&! słowo
&>>| słowo
&>>! słowo
Przekierowuje zarówno standardowe wyjście, jak i standardowy błąd (deskryptor pliku 2) w ten sposób
z `>>| słowo'.
Jeśli jedno z powyższych jest poprzedzone cyfrą, wówczas deskryptor pliku, o którym mowa, jest właśnie tym
określony przez cyfrę zamiast domyślnego 0 lub 1. Kolejność przekierowań
określone jest istotne. Powłoka ocenia każde przekierowanie pod kątem (filet
deskryptor, filet) stowarzyszenia w momencie oceny. Na przykład:
... 1>nazwa użytkownika 2> & 1
najpierw kojarzy deskryptor pliku 1 z plikiem nazwa użytkownika. Następnie kojarzy deskryptor pliku 2
z plikiem powiązanym z deskryptorem pliku 1 (tzn. nazwa użytkownika). Jeśli kolejność
przekierowania zostały odwrócone, deskryptor pliku 2 zostałby powiązany z terminalem
(zakładając, że był deskryptor pliku 1), a następnie deskryptor pliku 1 zostałby powiązany
filet nazwa użytkownika.
`|&' separator poleceń opisany w Prosty Polecenia & Rurociągi in zshmisc(1) jest
skrót dla `2> & 1 |'.
Różne formy substytucji procesów, `<(podstęp)' i `=(podstęp)' dla danych wejściowych i
`>(podstęp)' dla wyjścia, są często używane razem z przekierowaniem. Na przykład, jeśli słowo in
przekierowanie wyjścia ma postać `>(podstęp)', następnie dane wyjściowe są przesyłane do polecenia
reprezentowane przez podstęp. Zobaczyć Przetwarzanie Podstawienie in zshexpn(1).
OTWARCIE FILE DESKRYPTORY ZA POMOCĄ PARAMETRY
Kiedy powłoka analizuje argumenty polecenia i opcji powłoki IGNORE_BRACES is
nie ustawiono, dozwolona jest inna forma przekierowania: zamiast cyfry przed
operatorem, w nawiasach klamrowych znajduje się prawidłowy identyfikator powłoki. Powłoka otworzy nową
deskryptor pliku, który ma gwarantowaną wartość co najmniej 10, i ustaw parametr nazwany przez
identyfikator do otwartego deskryptora pliku. Pomiędzy zamknięciem nie są dozwolone żadne odstępy
nawias klamrowy i znak przekierowania. Na przykład:
... {myfd}>&1
Spowoduje to otwarcie nowego deskryptora pliku, który jest duplikatem deskryptora pliku 1 i ustawienie
parametr mójfd na numer deskryptora pliku, który będzie wynosić co najmniej 10. Nowy
deskryptor pliku można zapisać przy użyciu składni >&$myfd.
Składnia {różne}>&-, Na przykład {myfd}>&-, można użyć do zamknięcia deskryptora pliku
otwarte w ten sposób. Należy pamiętać, że parametr podany przez różne należy wcześniej ustawić na
w tym przypadku deskryptor pliku.
Otwieranie lub zamykanie deskryptora pliku w ten sposób, gdy parametr ma wartość, jest błędem
tylko czytać. Jednak odczytanie lub zapisanie deskryptora pliku przy użyciu nie jest błędem <&$moje pieniądze
or >&$moje pieniądze if moje pieniądze jest tylko do odczytu.
Jeśli opcja SPRAĆ jest nieustawiony, otwarcie deskryptora pliku przy użyciu parametru będzie błędem
który jest już ustawiony na otwarty deskryptor pliku przydzielony wcześniej przez ten mechanizm.
Anulowanie ustawienia parametru przed użyciem go do przydzielenia deskryptora pliku pozwala uniknąć błędu.
Należy pamiętać, że ten mechanizm jedynie przydziela lub zamyka deskryptor pliku; to nie działa
wszelkie przekierowania z lub do niego. Zwykle wygodnie jest przydzielić deskryptor pliku
przed użyciem jako argument exec. Składnia w żadnym przypadku nie działa, gdy jest używana
wokół złożonych poleceń, takich jak podpowłoki w nawiasach lub pętle, gdzie nawias otwierający
jest interpretowany jako część listy poleceń do wykonania w bieżącej powłoce.
Poniżej przedstawiono typową sekwencję alokacji, użycia i zamykania pliku
deskryptor:
liczba całkowita mójfd
exec {myfd}>~/logs/mylogfile.txt
Niniejsze is a log wiadomość. >&$myfd
exec {myfd}>&-
Należy pamiętać, że rozwinięcie zmiennej w wyrażeniu >&$myfd następuje w punkcie
przekierowanie jest otwarte. Dzieje się tak po rozwinięciu argumentów poleceń i po jakimkolwiek
przekierowania w lewo w wierszu poleceń zostały przetworzone.
WIELE
Jeśli użytkownik spróbuje otworzyć deskryptor pliku do zapisu więcej niż raz, otworzy się powłoka
deskryptor pliku jako potok do procesu, który kopiuje swoje dane wejściowe do wszystkich określonych
wyjścia podobne do trójnik, pod warunkiem WIELE opcja jest ustawiona, tak jak jest domyślnie. Zatem:
dane > fuj >pasek
zapisuje datę w dwóch plikach o nazwie `bla' i `bar'. Zauważ, że potok jest niejawny
przekierowanie; zatem
dane > fuj | jak
zapisuje datę do pliku `bla', a także przesyła go do cat.
Jeśli WIELE opcja jest ustawiona, słowo po operatorze przekierowania również podlega
generowanie nazw plików (globbing). Zatem
: > *
skróci wszystkie pliki w bieżącym katalogu, zakładając, że istnieje co najmniej jeden. (Bez
dotychczasowy WIELE opcję, utworzy pusty plik o nazwie `*'.) Podobnie możesz zrobić
przegapić wyjście 0 >> *.CII
Jeśli użytkownik spróbuje otworzyć deskryptor pliku do odczytu więcej niż raz, otworzy się powłoka
deskryptor pliku jako potok do procesu, który kopiuje do niego wszystkie określone dane wejściowe
wyjście w określonej kolejności, podobnie jak jak, pod warunkiem WIELE opcja jest ustawiona. Zatem
rodzaj <fuj <fubar
lub nawet
rodzaj <f{oo,ubar}
jest równoważne `jak bla fubar | rodzaj'.
Rozwinięcie argumentu przekierowania następuje w momencie otwarcia przekierowania, czyli o godz
punkt opisany powyżej dla rozwinięcia zmiennej in >&$myfd.
Należy pamiętać, że potok jest ukrytym przekierowaniem; zatem
jak bar | rodzaj <fuj
jest równoważne `jak bar bla | rodzaj' (zwróć uwagę na kolejność wejść).
Jeśli WIELE Jest opcja unustawione, każde przekierowanie zastępuje poprzednie przekierowanie
ten deskryptor pliku. Jednak wszystkie przekierowane pliki są faktycznie otwierane, więc
przegapić Cześć > bar > baz
jeśli chodzi o komunikację i motywację WIELE jest nieustawiony, spowoduje obcięcie `bar' i napisz `Cześć'do'baz'.
Występuje problem, gdy wyjście multio jest podłączone do programu zewnętrznego. Prosty
przykład pokazuje to:
jak filet >plik1 >plik2
jak file1 file2
Tutaj możliwe jest, że drugie `jak' nie wyświetli pełnej zawartości file1 oraz
file2 (tj. oryginalna zawartość filet powtórzone dwukrotnie).
Powodem tego jest to, że multiosy pojawiają się po jak proces jest rozwidlony
powłoka nadrzędna, więc powłoka nadrzędna nie czeka, aż multios zakończy zapisywanie
dane. Oznacza to, że pokazane polecenie może zakończyć się wcześniej file1 oraz file2 są całkowicie
pisemny. W ramach obejścia tego problemu można uruchomić plik jak proces w ramach pracy w
aktualna powłoka:
{ jak filet } >plik >plik2
Tutaj {...} zadanie zostanie wstrzymane w oczekiwaniu na zapisanie obu plików.
PRZEKIEROWANIA Z NIE COMMAND
Gdy proste polecenie składa się z jednego lub więcej operatorów przekierowania i zera lub więcej
przypisań parametrów, ale bez nazwy polecenia, zsh może zachowywać się na kilka sposobów.
Jeśli parametr NULLCMD nie jest ustawiona lub opcja CSH_NULLCMD jest ustawiony, pojawia się błąd.
To jest csh zachowanie i CSH_NULLCMD jest ustawiony domyślnie podczas emulacji csh.
Jeśli opcja SH_NULLCMD jest ustawione, wbudowane `:' jest wstawiany jako polecenie z podanym
przekierowania. Jest to ustawienie domyślne podczas emulacji sh or ksh.
W przeciwnym razie, jeśli parametr NULLCMD jest ustawiona, jej wartość będzie używana jako polecenie z
podane przekierowania. Jeśli oba NULLCMD oraz PRZECZYTAJ CMD są ustawione, następnie wartość tej ostatniej
zostanie użyte zamiast tego pierwszego, gdy przekierowanie jest wejściem. Domyślny
dla NULLCMD jest `jak' i dla PRZECZYTAJ CMD jest `jeszcze'. Zatem
< filet
pokazuje zawartość filet na standardowe wyjście, ze stronicowaniem, jeśli jest to terminal. NULLCMD
oraz PRZECZYTAJ CMD może odnosić się do funkcji powłoki.
COMMAND WDRAŻAJĄC
Jeśli nazwa polecenia nie zawiera ukośników, powłoka próbuje ją zlokalizować. Jeśli istnieje
powłoki o tej nazwie, funkcja ta jest wywoływana w sposób opisany w tej sekcji
„Funkcje”. Jeśli istnieje wbudowana powłoka o tej nazwie, zostanie ona wywołana.
W przeciwnym razie powłoka przeszukuje każdy element $ ścieżka dla katalogu zawierającego plik
plik wykonywalny o tej nazwie. Jeśli wyszukiwanie zakończy się niepowodzeniem, powłoka wyświetli błąd
komunikat i zwraca niezerowy status wyjścia.
Jeśli wykonanie nie powiedzie się, ponieważ plik nie jest w formacie wykonywalnym i nie jest to plik
katalogu, zakłada się, że jest to skrypt powłoki. / Bin / sh pojawia się, aby go wykonać. Jeśli
program jest plikiem zaczynającym się od `#!', pozostała część pierwszego wiersza określa an
tłumacz programu. Powłoka uruchomi określony interpreter
systemy operacyjne, które nie obsługują tego formatu wykonywalnego w jądrze.
Jeśli nie zostanie znalezione żadne polecenie zewnętrzne, ale funkcja polecenie_not_znalezione_handler istnieje skorupa
wykonuje tę funkcję ze wszystkimi argumentami wiersza poleceń. Funkcja powinna zwrócić status
zero, jeśli pomyślnie obsłużył polecenie, lub status różny od zera, jeśli nie powiodło się. w
w tym drugim przypadku stosowana jest standardowa obsługa: „nie znaleziono polecenia” jest drukowane w standardowy sposób
błąd i powłoka kończy działanie ze statusem 127. Należy zauważyć, że procedura obsługi jest wykonywana w a
podpowłoka rozwidlona w celu wykonania polecenia zewnętrznego, stąd zmiany w katalogach, Shell
parametry itp. nie mają wpływu na główną powłokę.
FUNKCJE
Funkcje powłoki są definiowane za pomocą funkcjonować słowo zastrzeżone lub specjalna składnia
`nazwa funkcji ()'. Funkcje powłoki są wczytywane i przechowywane wewnętrznie. Aliasy to nazwy
rozwiązany po odczytaniu funkcji. Funkcje są wykonywane jak polecenia za pomocą
argumenty przekazywane jako parametry pozycyjne. (Zobacz sekcję „Wykonywanie poleceń”.)
Funkcje są wykonywane w tym samym procesie co wywołujący i udostępniają wszystkie pliki i obecne
katalog roboczy z osobą dzwoniącą. Pułapka włączona EXIT ustawiona wewnątrz funkcja jest wykonywana po
funkcja kończy się w środowisku wywołującym.
powrót wbudowany służy do powrotu z wywołań funkcji.
Identyfikatory funkcji można wyświetlić za pomocą Funkcje wbudowany. Funkcje mogą być niezdefiniowane
z niefunkcjonalny wbudowany.
AUTOŁADOWANIE FUNKCJE
Funkcję można oznaczyć jako niezdefiniowany używając automatyczne ładowanie wbudowany (lub `Funkcje -u' lub
`skład -fu'). Funkcja taka nie ma ciała. Kiedy funkcja jest wykonywana po raz pierwszy,
Shell wyszukuje swoją definicję przy użyciu elementów fścieżka zmienny. Zatem do
zdefiniuj funkcje automatycznego ładowania, typowa sekwencja to:
fścieżka=(~/mojefunkcje $fścieżka)
automatyczne ładowanie mojafunkcja1 mojafunkcja2 ...
Zwykłe rozwijanie aliasów podczas odczytu zostanie wyłączone, jeśli automatyczne ładowanie wbudowany lub jego
odpowiednik ma opcję -U. Jest to zalecane w przypadku korzystania z dostarczonych funkcji
z dystrybucją zsh. Należy pamiętać, że w przypadku funkcji prekompilowanych z zkompiluj wbudowany
rozkazywać flagę -U należy podać w przypadku .zwc plik jest tworzony jako odpowiedni
informacje są gromadzone w tym drugim.
Dla każdego element in fścieżka, powłoka szuka trzech możliwych plików, z których najnowszy
służy do załadowania definicji funkcji:
element.zwc
Plik utworzony za pomocą zkompiluj wbudowane polecenie, które powinno zawierać plik
definicje wszystkich funkcji w katalogu o nazwie element. Plik jest traktowany
w taki sam sposób jak katalog zawierający pliki funkcji i jest przeszukiwany
do definicji funkcji. Jeśli definicja nie zostanie znaleziona, wyszukaj
dla definicji stosuje się dwie pozostałe możliwości opisane poniżej.
If element zawiera już A .zwc rozszerzenie (tj. rozszerzenie było jawnie
podane przez użytkownika), element szuka się definicji funkcji bez
porównanie jego wieku z wiekiem innych plików; w rzeczywistości nie ma takiej potrzeby
katalog o nazwie element bez przyrostka. Zatem włączając element taki jak
`/usr/local/funcs.zwc' w fścieżka przyspieszy wyszukiwanie funkcji, dzięki
Wadą jest to, że zawarte w nim funkcje muszą zostać wcześniej ręcznie przekompilowane
powłoka zauważa wszelkie zmiany.
element/funkcjonować.zwc
Plik utworzony za pomocą zkompiluj, który powinien zawierać definicję
funkcjonować. Może zawierać także inne definicje funkcji, ale one nie są żadną z nich
załadowany ani wykonany; znaleziony w ten sposób plik jest przeszukiwany tylko dla definicji
of funkcjonować.
element/funkcjonować
Plik z tekstem poleceń zsh, uznawany za definicję funkcjonować.
Podsumowując, kolejność wyszukiwania jest następująca: w rodzice of katalogi w fścieżka dla
nowszy z katalogu skompilowanego lub katalogu w fścieżka; drugi, jeśli więcej niż jeden
z nich zawiera definicję szukanej funkcji, skrajnie po lewej stronie fścieżka
jest wybrany; i po trzecie, w katalogu, nowsza wersja skompilowanej funkcji lub
używana jest zwykła definicja funkcji.
Jeśli KSH_AUTOLOAD opcja jest ustawiona lub plik zawiera tylko prostą definicję
funkcja, zawartość pliku zostanie wykonana. Zwykle definiuje to funkcję w
pytanie, ale może również wykonać inicjalizację, która jest wykonywana w kontekście
wykonanie funkcji i dlatego może definiować parametry lokalne. Jest to błąd, jeśli
funkcja nie jest zdefiniowana przez załadowanie pliku.
W przeciwnym razie treść funkcji (bez otaczającego pliku `nazwa funkcji() {...}') uważa się za
pełna zawartość pliku. Ta forma umożliwia bezpośrednie użycie pliku jako pliku
wykonywalny skrypt powłoki. Jeśli przetwarzanie pliku spowoduje, że funkcja będzie
ponownie zdefiniowana, sama funkcja nie jest wykonywana ponownie. Aby wymusić działanie powłoki
inicjalizacja, a następnie wywołać zdefiniowaną funkcję, plik powinien zawierać inicjalizację
kod (który zostanie wykonany, a następnie odrzucony) oprócz pełnej definicji funkcji
(które zostaną zachowane dla kolejnych wywołań funkcji) i wywołanie powłoki
funkcję, łącznie z argumentami, na końcu.
Załóżmy na przykład, że plik autoload funkcjonować zawiera
funkcja() { Niniejsze is funkcja; }
funkcjonować is zainicjowano
następnie `funkcja; funkcjonować' z KSH_AUTOLOAD set wygeneruje oba komunikaty przy pierwszym połączeniu, ale
tylko wiadomość `Niniejsze is funkcjonować' podczas drugiego i kolejnych połączeń. Bez KSH_AUTOLOAD
ustawiony, wygeneruje komunikat inicjujący przy pierwszym połączeniu i drugi komunikat
podczas drugiego i kolejnych połączeń.
Możliwe jest również utworzenie funkcji, która nie jest oznaczona jako ładowana automatycznie, ale która się ładuje
własną definicję poprzez wyszukiwanie fścieżka, używając `automatyczne ładowanie -X' w funkcji powłoki.
Na przykład następujące są równoważne:
mojafunkcja() {
automatyczne ładowanie -X
}
mojafunkcja argumenty...
oraz
niefunkcjonalny mojafunkcja # if mojafunkcja była zdefiniowane
automatyczne ładowanie mojafunkcja
mojafunkcja argumenty...
W rzeczywistości Funkcje wyjścia poleceń `wbudowany automatyczne ładowanie -X' jako ciało automatycznie ładowanego
funkcjonować. Odbywa się to tak, że
eval „$(funkcje)”
daje rozsądny wynik. Prawdziwą funkcję automatycznego ładowania można rozpoznać po
obecność komentarza `# niezdefiniowany' w treści, ponieważ wszystkie komentarze są odrzucane
zdefiniowane funkcje.
Aby załadować definicję funkcji ładowanej automatycznie mojafunkcja bez wykonywania mojafunkcja, posługiwać się:
automatyczne ładowanie +X mojafunkcja
ANONIMOWY FUNKCJE
Jeśli funkcja nie ma nazwy, jest ona „anonimowa” i traktowana jest specjalnie. Albo
można zastosować formę definicji funkcji: a `()' bez poprzedzającej nazwy lub `funkcjonować'
z bezpośrednio następującym po nim nawiasem otwartym. Funkcja jest wykonywana natychmiast po
punktu definicji i nie są przechowywane do wykorzystania w przyszłości. Nazwa funkcji jest ustawiona na
`(zaraz)'.
Argumenty funkcji można podać jako słowa po definiującym nawiasie zamykającym
funkcję, a więc jeśli nie ma żadnych argumentów (innych niż $0) są ustawione. To jest
różnica w stosunku do sposobu analizowania innych funkcji: mogą być normalne definicje funkcji
po którym następują pewne słowa kluczowe, takie jak `więcej' lub `fi', które będą traktowane jako argumenty
funkcje anonimowe, więc do wymuszenia słowa kluczowego potrzebny jest znak nowej linii lub średnik
interpretacja.
Należy również zauważyć, że lista argumentów dowolnego otaczającego skryptu lub funkcji jest ukryta (tak jak w przypadku
tak będzie w przypadku każdej innej funkcji wywoływanej w tym momencie).
Przekierowania można zastosować do funkcji anonimowej w taki sam sposób, jak w przypadku a
struktura powłoki prądowej ujęta w nawiasy klamrowe. Głównym zastosowaniem funkcji anonimowych jest
zapewnić zakres zmiennych lokalnych. Jest to szczególnie wygodne w przypadku plików startowych, takich jak
nie zapewniają one własnego zakresu zmiennych lokalnych.
Na przykład,
zmienna = na zewnątrz
funkcjonować {
miejscowy zmienna = wewnątrz
"I am $zmienna w argumenty $*”
} to oraz że
"I am $zmienna”
wyprowadza następujące informacje:
I am wewnątrz w argumenty to oraz że
I am zewnętrzne
Należy pamiętać, że definicje funkcji z argumentami rozwijającymi się do zera, na przykład `imię=;
funkcjonować $ nazwa { ... }', nie są traktowane jako funkcje anonimowe. Zamiast tego są
traktowane jako normalne definicje funkcji, w przypadku których definicja jest dyskretnie odrzucana.
SPECIAL FUNKCJE
Niektóre funkcje, jeśli są zdefiniowane, mają specjalne znaczenie dla powłoki.
Hak Funkcje
Dla poniższych funkcji można zdefiniować tablicę o takiej samej nazwie jak
funkcja z `_Funkcje' w załączeniu. Każdy element takiej tablicy jest traktowany jako nazwa
funkcja do wykonania; jest wykonywany w tym samym kontekście i z tymi samymi argumentami co
podstawowa funkcja. Na przykład, jeśli $chpwd_funkcje jest tablicą zawierającą wartości
`mychpwd', 'chpwd_save_dirstack', następnie powłoka próbuje wykonać funkcje
`rozdz', 'mychpwd' i `chpwd_save_dirstack', w tej kolejności. Dowolna funkcja, która tego nie robi
istnieje, jest po cichu ignorowane. Funkcja znaleziona przez ten mechanizm jest określana w innym miejscu jako
„funkcją haka”. Błąd w którejkolwiek funkcji powoduje, że kolejne funkcje nie zostaną uruchomione.
Należy ponadto zauważyć, że błąd w pliku a precmd hook powoduje natychmiastowe następstwo periodycznie
aby nie uruchamiać funkcji (chociaż może zostać uruchomiona przy następnej okazji).
rozdz Wykonywane przy każdej zmianie bieżącego katalogu roboczego.
periodycznie
Jeśli parametr OKRES jest ustawiona, funkcja ta jest wykonywana co $OKRES sekundy,
tuż przed podpowiedzią. Należy pamiętać, że jeśli zdefiniowano wiele funkcji za pomocą tablicy
funkcje_okresowe do pełnego zestawu funkcji stosuje się tylko jeden okres, oraz
w przypadku zmiany listy funkcji zaplanowany czas nie zostanie zresetowany. Stąd zestaw
funkcji jest zawsze wywoływana razem.
precmd Wykonywane przed każdym monitem. Należy pamiętać, że funkcje poleceń wstępnych nie są ponownie wykonywane
po prostu dlatego, że linia poleceń jest przerysowywana, co ma miejsce na przykład wtedy, gdy a
wyświetlane jest powiadomienie o kończącym się zadaniu.
preegzekutor
Wykonywane zaraz po przeczytaniu polecenia i jego wykonaniu. Jeśli
mechanizm historii jest aktywny (niezależnie od tego, czy linia została odrzucona z pliku
bufor historii), jako pierwszy argument przekazywany jest ciąg znaków wpisany przez użytkownika,
w przeciwnym razie jest to pusty ciąg. Rzeczywiste polecenie, które zostanie wykonane
(w tym rozszerzone aliasy) jest przekazywany w dwóch różnych formach: jako drugi argument
to jednowierszowa wersja polecenia o ograniczonym rozmiarze (z takimi elementami jak funkcja
ciała ominęły); trzeci argument zawiera pełny tekst, który jest wykonywany.
zshaddhistoria
Wykonywane, gdy wiersz historii został odczytany interaktywnie, ale wcześniej
wykonany. Jedynym argumentem jest pełna linia historii (tak, że każde zakończenie
znak nowej linii będzie nadal obecny).
Jeśli którakolwiek funkcja przechwytująca zwróci status 1 (lub dowolną wartość niezerową inną niż 2,
chociaż nie jest to gwarantowane w przypadku przyszłych wersji powłoki) linii historii
nie zostanie zapisany, chociaż pozostanie w historii aż do następnej linii
wykonany, co pozwala na jego natychmiastowe ponowne wykorzystanie lub edycję.
Jeśli którakolwiek funkcja przechwytująca zwróci status 2, linia historii zostanie zapisana w pliku
wewnętrzna lista historii, ale nie są zapisywane w pliku historii. W przypadku konfliktu,
pobierana jest pierwsza niezerowa wartość statusu.
Funkcja haka może wywołać `fc -p ...', aby zmienić kontekst historii tak, aby
historia jest zapisywana w innym pliku niż plik global PLIK HIST
parametr. Jest to obsługiwane specjalnie: kontekst historii jest automatycznie
przywrócone po zakończeniu przetwarzania wiersza historii.
Poniższa przykładowa funkcja działa z jedną z opcji INC_APPEND_HISTORY or
UDOSTĘPNIJ_HISTORIĘ set, aby linia została wypisana bezpośrednio po
dodano wpis historii. Najpierw dodaje linię historii do normalnej historii za pomocą
usunięto znak nowej linii, co zwykle jest prawidłowym zachowaniem. Następnie przełącza
kontekst historii, dzięki czemu linia zostanie zapisana w pliku historii w bieżącym formacie
katalogiem.
zshaddhistoria() {
-sr -- ${1%%$'\n'}
fc -p .zsh_lokalna_historia
}
zsześć
Wykonywane w momencie, w którym główna powłoka ma zamiar normalnie wyjść. To nie jest
wywoływane przez wychodzenie z podpowłok, ani kiedy exec modyfikator polecenia wstępnego był używany wcześniej
polecenie zewnętrzne. Również w przeciwieństwie TRAPEXIT, nie jest wywoływany, gdy funkcje kończą działanie.
Pułapka Funkcje
Poniższe funkcje są traktowane specjalnie, ale nie mają odpowiednich tablic haków.
PUŁAPKAnal
Jeśli zdefiniowano i nie ma wartości null, ta funkcja zostanie wykonana za każdym razem, gdy powłoka złapie
sygnał SIGnal, Gdzie nal jest nazwą sygnału określoną dla zabić wbudowany. ten
numer sygnału zostanie przekazany jako pierwszy parametr do funkcji.
Jeśli funkcja w tej formie jest zdefiniowana i ma wartość null, powłoka i procesy uruchamiane przez
to zignoruje SIGnal.
Status powrotu z funkcji jest obsługiwany specjalnie. Jeżeli wynosi zero, to
Zakłada się, że sygnał został obsłużony i wykonywanie jest kontynuowane normalnie.
W przeciwnym razie powłoka będzie zachowywać się jak przerwana, z wyjątkiem tego, że zostanie zwrócony status
pułapka zostaje zachowana.
Programy zakończone nieprzechwyconymi sygnałami zazwyczaj zwracają status 128 plus
numer sygnału. Dlatego następujące przyczyny powodują procedurę obsługi SIGINT wydrukować
wiadomość, a następnie naśladuj zwykły efekt sygnału.
TRAPINT() {
"Złapany PODPIS, aborcja.”
powrót $(( 128 + $1 ))
}
Funkcje TRAPZER, TRAPDEBUG oraz TRAPEXIT nigdy nie są wykonywane wewnątrz innych
majdan.
TRAPDEBUG
Jeśli opcja DEBUG_BEFORE_CMD jest ustawiony (tak jak jest domyślnie), wykonywany przed każdym
Komenda; w przeciwnym razie wykonywane po każdym poleceniu. Zobacz opis pułapka
wbudowany zshbuiltins(1) aby uzyskać szczegółowe informacje na temat dodatkowych funkcji dostępnych w debug
majdan.
TRAPEXIT
Wykonywane po wyjściu powłoki lub zakończeniu bieżącej funkcji, jeśli została zdefiniowana wewnątrz
funkcja. Wartość $? na początku wykonywania jest statusem wyjścia
powłoki lub status powrotu funkcji.
TRAPZER
Wykonywane za każdym razem, gdy polecenie ma niezerowy status zakończenia. Jednak funkcja jest
nie zostanie wykonane, jeśli polecenie wystąpiło na podliście, po której następuje `&&' lub `||'; tylko
ostatnie polecenie na podliście tego typu powoduje wykonanie pułapki. The
funkcjonować TRAPER działa tak samo jak TRAPZER w systemach, w których nie ma SIGERR
(jest to typowy przypadek).
Funkcje zaczynające się od `PUŁAPKA' można alternatywnie zdefiniować za pomocą pułapka wbudowany: to
może być preferowany do niektórych zastosowań. Ustawienie pułapki z jedną formą usuwa wszelkie pułapki
inna forma dla tego samego sygnału; usunięcie pułapki w dowolnej formie powoduje usunięcie wszystkich pułapek dla
ten sam sygnał. Formularze
TRAPNAL() {
# kod
}
(„pułapki funkcyjne”) i
pułapka '
# kod
' nal
(„listy pułapek”) są w większości przypadków równoważne, z następującymi wyjątkami:
· Pułapki funkcyjne mają wszystkie właściwości normalnych funkcji pojawiających się na liście
funkcji i wywoływania ich z własnym kontekstem funkcji, a nie z
kontekst, w którym pułapka została uruchomiona.
· Status powrotu z pułapek funkcji jest wyjątkowy, natomiast powrót z pułapki listy
powoduje powrót otaczającego kontekstu z zadanym statusem.
· Pułapki funkcyjne nie są resetowane w obrębie podpowłok, zgodnie z zachowaniem Zsh;
pułapki listowe są resetowane, zgodnie z zachowaniem POSIX.
OFERTY PRACY
Jeśli MONITOR opcja jest ustawiona, powłoka interaktywna kojarzy a praca z każdym rurociągiem.
Prowadzi tabelę bieżących zadań wydrukowanych przez Oferty pracy polecenie i przypisuje je małe
liczby całkowite. Kiedy zadanie jest uruchamiane asynchronicznie z `&', powłoka wypisuje linię
na standardowy błąd, który wygląda następująco:
[1] 1234
wskazując, że zadanie, które zostało uruchomione asynchronicznie, było zadaniem numer 1 i je posiadało
(najwyższego poziomu), którego identyfikator procesu to 1234.
Jeśli zadanie rozpoczyna się od `&|' lub `&!', wówczas natychmiast wyrzeka się tej pracy. Po
uruchomieniu, nie ma miejsca w tabeli zadań i nie podlega kontroli zadań
funkcje opisane tutaj.
Jeśli wykonujesz zadanie i chcesz zrobić coś innego, możesz nacisnąć klawisz ^Z (control-Z)
który wysyła TST sygnał do bieżącego zadania: ten klucz może zostać przedefiniowany przez podejrz
opcja zewnętrzna stty Komenda. Powłoka zwykle wskaże wówczas, że zadanie
został „zawieszony” i wyświetli kolejny monit. Następnie możesz manipulować stanem tego
zadanie, umieszczając je w tle wraz z plikiem bg polecenie lub uruchom inne polecenia, a następnie
ostatecznie przenieś zadanie z powrotem na pierwszy plan za pomocą polecenia pierwszoplanowego fg. A^Z
zaczyna działać natychmiast i działa jak przerwanie w oczekującym wyjściu i nieprzeczytanym wejściu
są odrzucane po wpisaniu.
Zadanie uruchamiane w tle zostanie zawieszone w przypadku próby odczytu z terminala.
Należy pamiętać, że jeśli zadaniem działającym na pierwszym planie jest funkcja powłoki, należy ją zawiesić
spowoduje rozwidlenie powłoki. Jest to konieczne, aby oddzielić
stan funkcji od stanu powłoki nadrzędnej wykonującej kontrolę zadania, tak że
ten ostatni może powrócić do wiersza poleceń. W rezultacie, nawet jeśli fg służy do kontynuacji
zadanie, dla którego funkcja nie będzie już częścią powłoki nadrzędnej, i wszelkie zmienne przez nią ustawione
funkcja nie będzie widoczna w powłoce nadrzędnej. Zatem zachowanie jest inne
z przypadku, gdy funkcja nigdy nie została zawieszona. Zsh różni się od wielu innych
skorupy w tym zakresie.
To samo zachowanie występuje, gdy powłoka wykonuje kod po prawej stronie a
potok lub dowolna złożona konstrukcja powłoki, taka jak if, dlaitp., aby całość
blokiem kodu można zarządzać jako pojedynczym zadaniem. Zadania w tle są zwykle dozwolone
generuje dane wyjściowe, ale można to wyłączyć, wydając polecenie `stty zatrzymać'. Jeśli ustawisz
tę opcję tty, zadania w tle zostaną zawieszone, gdy będą próbowały wygenerować podobne dane wyjściowe
robią to, gdy próbują odczytać dane wejściowe.
Kiedy polecenie zostanie zawieszone i kontynuowane później za pomocą fg or czekać wbudowane, Zsh przywraca
tty, które obowiązywały w momencie zawieszenia. To (celowo) nie ma zastosowania
jeśli polecenie jest kontynuowane poprzez `zabić -KONTY', ani kiedy jest kontynuowany bg.
Istnieje kilka sposobów odwoływania się do zadań w powłoce. Pracę można skierować za pomocą
identyfikator procesu dowolnego procesu zadania lub jedną z następujących opcji:
%numer
Praca o podanym numerze.
%ciąg
Każde zadanie, którego wiersz poleceń zaczyna się od ciąg.
%?ciąg
Każde zadanie, którego wiersz poleceń zawiera ciąg.
%% Obecna praca.
%+ Odpowiednik `%%'.
%- Poprzednia praca.
Powłoka uczy się natychmiast, gdy proces zmienia stan. Zwykle cię informuje
za każdym razem, gdy zadanie zostanie zablokowane i dalszy postęp nie będzie możliwy. Jeśli ZGŁOSZENIA
opcja nie jest ustawiona, czeka aż do momentu wydrukowania monitu i poinformuje Cię o tym.
Wszystkie takie powiadomienia wysyłane są bezpośrednio do terminala, a nie na standardowe wyjście
Standardowy błąd.
Gdy tryb monitorowania jest włączony, każde ukończone zadanie w tle wyzwala dowolną ustawioną pułapkę
DZIECKO.
Jeśli spróbujesz opuścić powłokę, gdy zadania są uruchomione lub zawieszone, zostaniesz ostrzeżony
komunikat „Zawiesiłeś (aktywne) zadania”. Możesz skorzystać z Oferty pracy polecenie, aby zobaczyć, co oni
Czy. Jeśli to zrobisz lub natychmiast spróbujesz ponownie wyjść, powłoka nie wyświetli ostrzeżenia
drugi raz; zawieszone zadania zostaną zakończone, a uruchomione zadania zostaną wysłane
ZGŁOSZENIE sygnał, jeśli HUP opcja jest ustawiona.
Aby uniknąć konieczności kończenia przez powłokę uruchomionych zadań, użyj metody noup polecenie (patrz
noup(1)) lub zapierać się wbudowany.
SYGNAŁY
INT oraz QUIT sygnały wywołanego polecenia są ignorowane, jeśli po poleceniu następuje
`&' i MONITOR opcja nie jest aktywna. Sama powłoka zawsze ignoruje QUIT
sygnał. W przeciwnym razie sygnały mają wartości odziedziczone przez powłokę od swojego rodzica (ale
zobacz PUŁAPKAnal funkcje specjalne w sekcji „Funkcje”).
Niektóre zadania są uruchamiane asynchronicznie przez powłokę, inne niż te jawnie umieszczone w
tło; nawet w przypadkach, gdy powłoka zwykle czeka na takie zadania, jawne
wyjście polecenie lub wyjście ze względu na opcję BŁĄD_WYJŚCIE spowoduje wyjście powłoki bez
Czekanie. Przykładami takich zadań asynchronicznych jest zastępowanie procesów, patrz sekcja
PODSTAWIENIE PROCESU w zshexpn(1) strona podręcznika i procesy obsługi dla multios,
zobacz sekcję MULTIOS w zshmisc(1) strona podręcznika.
ARYTMETYKA OCENA
Powłoka może wykonywać arytmetykę na liczbach całkowitych i zmiennoprzecinkowych, korzystając z funkcji wbudowanych niech,
lub poprzez podstawienie formularza $((...)). W przypadku liczb całkowitych zwykle kompilowana jest powłoka
aby używać precyzji 8-bajtowej, jeśli jest ona dostępna, w przeciwnym razie precyzja wynosi 4 bajty. To może
można przetestować, na przykład wydając polecenie ` - $(( 12345678901 ))'; jeśli numer
wydaje się niezmieniony, dokładność wynosi co najmniej 8 bajtów. Zawsze arytmetyka zmiennoprzecinkowa
używa typu `double' z dowolną precyzją zapewnioną przez kompilator
i biblioteka.
niech wbudowane polecenie przyjmuje wyrażenia arytmetyczne jako argumenty; każdy jest oceniany
osobno. Ponieważ wiele operatorów arytmetycznych, a także spacji, wymaga cytowania,
dostępna jest alternatywna forma: dla dowolnego polecenia rozpoczynającego się od `((', wszystkie
znaków aż do pasującego `))' są traktowane jako wyrażenie w cudzysłowie i działanie arytmetyczne
rozwinięcie wykonane jak dla argumentu niech. Dokładniej: `((...))' jest równa
`niech "..."'. Status powrotu wynosi 0, jeśli wartość arytmetyczna wyrażenia wynosi
niezerowe, 1, jeśli wynosi zero i 2, jeśli wystąpił błąd.
Na przykład poniższe stwierdzenie
(( val = 2 + 1 ))
odpowiada
niech „wal = 2 + 1"
oba przypisują wartość 3 zmiennej powłoki val i zwrócenie statusu zerowego.
Liczby całkowite mogą mieć podstawy inne niż 10. Wiodący `0x' lub `0X' oznacza liczbę szesnastkową i a
wiodący `0b' lub `0B'binarny. Liczby całkowite mogą mieć także postać `baza#n', gdzie baza jest
liczba dziesiętna od dwóch do trzydziestu sześciu, reprezentująca podstawę arytmetyczną i n jest
liczba w tej podstawie (na przykład `16#ff' wynosi 255 w formacie szesnastkowym). The baza# może także być
pominięty, w takim przypadku używana jest podstawa 10. Aby zapewnić kompatybilność wsteczną, formularz `[baza]n' jest
również zaakceptowane.
Wyrażenie całkowite lub podstawa podana w postaci `baza#n' może zawierać podkreślenia (`_')
po cyfrze wiodącej dla wskazówek wizualnych; są one ignorowane w obliczeniach. Przykłady
jest 1_000_000 or 0xffff_ffff które są równoważne 1000000 oraz 0xffffffff odpowiednio.
Możliwe jest również określenie podstawy, która będzie używana do wyprowadzania w postaci `[#baza]', Do
przykład `[# 16]'. Jest to używane podczas wyprowadzania podstawień arytmetycznych lub kiedy
przypisanie do parametrów skalarnych, ale jawnie zdefiniowanej liczby całkowitej lub zmiennoprzecinkowej
parametr nie będzie miał wpływu. Jeśli zmienna całkowita jest domyślnie zdefiniowana przez an
wyrażenie arytmetyczne, każda określona w ten sposób podstawa zostanie ustawiona jako wynik zmiennej
podstawa arytmetyczna, jak gdyby opcja `-i baza' do skład wbudowany został użyty. The
wyrażenie nie ma pierwszeństwa i jeśli występuje więcej niż raz w wyrażeniu matematycznym,
używany jest ostatni napotkany. Dla przejrzystości zaleca się, aby pojawił się on na stronie
początek wyrażenia. Jako przykład:
skład -i 16 y
$(( [# 8] x = 32, y = 32 ))
$x $y
najpierw wyprowadza `8 # 40', skrajna na prawo wartość w danej podstawie wyjściowej, a następnie `8 # 40 16 # 20',
bo y został jawnie zadeklarowany jako mający podstawę wyjściową 16, podczas gdy x (zakładając, że tak
jeszcze nie istnieje) jest domyślnie wpisywany przez ocenę arytmetyczną, gdzie uzyskuje wartość
podstawa wyjściowa 8.
baza można zastąpić znakiem podkreślenia lub po nim może nastąpić znak podkreślenia
dodatnia liczba całkowita (w przypadku jej braku stosowana jest wartość 3). Oznacza to podkreślenie
należy wstawić do ciągu wyjściowego, grupując liczbę dla przejrzystości wizualnej. The
następująca liczba całkowita określa liczbę cyfr do zgrupowania. Na przykład:
ustawienie bazy danych
$(( [#16_4] 65536 ** 2 ))
wyjścia `0x1_0000_0000'.
Funkcji można używać z liczbami zmiennoprzecinkowymi, w takim przypadku podstawa musi być
pominięty; grupowanie jest oddalone od przecinka dziesiętnego. Na przykład,
zmodload zsh/funkcja matematyczna
$(( [#_] kwadrat(1e7) ))
wyjścia `3_162.277_660_168_379_5' (liczba wyświetlanych miejsc po przecinku może się różnić).
Jeśli C_BAZY opcja jest ustawiona, liczby szesnastkowe są wyprowadzane w standardowym formacie C, np
przykład `0xFF'zamiast zwykłego'16#FF'. Jeśli opcja OCTAL_ZEROES jest również ustawiony (it
nie jest domyślnie), liczby ósemkowe będą traktowane podobnie i dlatego będą wyświetlane jako `077'
zamiast `8 # 77'. Opcja ta nie ma wpływu na wyjście baz innych niż
szesnastkowy i ósemkowy, a te formaty są zawsze rozumiane na wejściu.
Gdy podstawa wyjściowa jest określona za pomocą `[#baza]' składnia, odpowiedni przedrostek podstawowy
zostanie wyprowadzona, jeśli to konieczne, tak aby wartość wyjściowa była prawidłową składnią wejścia. Jeśli #
jest podwojone, na przykład `[##16]', wówczas nie jest wyprowadzany żaden przedrostek podstawowy.
Stałe zmiennoprzecinkowe są rozpoznawane po obecności przecinka dziesiętnego lub wykładnika.
Kropka dziesiętna może być pierwszym znakiem stałej, ale znakiem wykładnika e
or E może nie, ponieważ zostanie wzięta za nazwę parametru. Wszystkie części numeryczne (przed i
po przecinku i w wykładniku) mogą zawierać podkreślenia po wiodących
cyfra do wskazówek wizualnych; są one ignorowane w obliczeniach.
Wyrażenie arytmetyczne wykorzystuje prawie taką samą składnię i łączność wyrażeń jak
w C.
W natywnym trybie pracy obsługiwane są następujące operatory (wymienione w
malejąca kolejność pierwszeństwa):
+ - ! ~ ++ --
jednoargumentowy plus/minus, logiczne NIE, uzupełnienie, {pre,post}{in,de}krementacja
<< >> przesunięcie bitowe w lewo, w prawo
& bitowe AND
^ bitowe XOR
| bitowe OR
** potęgowanie
* / % mnożenie, dzielenie, moduł (reszta)
+ - dodawanie odejmowanie
< > <= >=
porównanie
== != równość i nierówność
&& logiczne ORAZ
|| ^^ logiczne OR, XOR
? : operator trójskładnikowy
= += -= *= /= %= &= ^= |= << = >> = && = || = ^^= ** =
cesja
, operator przecinka
Operatorzy `&&', '||', '&& =' i `|| =' powodują zwarcie i tylko jeden z nich
oceniane są dwa ostatnie wyrażenia w operatorze trójskładnikowym. Zwróć uwagę na pierwszeństwo
bitowe operatory AND, OR i XOR.
Z opcją C_PRECEDENCJE pierwszeństwa (ale żadne inne właściwości) operatorów
są zmieniane tak, aby były takie same jak w większości innych języków, które obsługują odpowiednie
operatorzy:
+ - ! ~ ++ --
jednoargumentowy plus/minus, logiczne NIE, uzupełnienie, {pre,post}{in,de}krementacja
** potęgowanie
* / % mnożenie, dzielenie, moduł (reszta)
+ - dodawanie odejmowanie
<< >> przesunięcie bitowe w lewo, w prawo
< > <= >=
porównanie
== != równość i nierówność
& bitowe AND
^ bitowe XOR
| bitowe OR
&& logiczne ORAZ
^^ logiczne XOR
|| logiczne OR
? : operator trójskładnikowy
= += -= *= /= %= &= ^= |= << = >> = && = || = ^^= ** =
cesja
, operator przecinka
Należy zauważyć, że pierwszeństwo potęgowania w obu przypadkach jest niższe niż w przypadku operatorów jednoargumentowych,
stąd `-3**2' ocenia jako `9', nie '-9'. W razie potrzeby użyj nawiasów: `-(3**2)'.
Ma to na celu zapewnienie kompatybilności z innymi powłokami.
Funkcje matematyczne można wywoływać za pomocą składni `funkcjonować(args)', gdzie funkcja
decyduje, czy args jest używany jako ciąg znaków lub rozdzielona przecinkami lista arytmetyczna
wyrażenia. Powłoka obecnie domyślnie nie definiuje żadnych funkcji matematycznych, ale
moduł zsh/funkcja matematyczna może być obciążony zmodload wbudowany, aby zapewnić standardowe pływanie
punktowe funkcje matematyczne.
Wyrażenie postaci `##x' gdzie x to dowolna sekwencja znaków, taka jak `a', '^A', lub
`\M-\Cx' podaje wartość tego znaku i wyrażenie postaci `#Nazwa' daje
wartość pierwszego znaku zawartości parametru Nazwa. Wartości znaków
są zgodne z zestawem znaków używanym w bieżących ustawieniach regionalnych; dla znaku wielobajtowego
obsługi opcji MULTIBAJT musi być ustawiony. Należy pamiętać, że ta forma różni się od
`$#Nazwa', standardowe podstawienie parametru, które podaje długość parametru Nazwa.
`#\' jest akceptowane zamiast `##', ale jego użycie jest przestarzałe.
W ramach arytmetyki można odwoływać się do nazwanych parametrów i tablic z indeksami dolnymi
wyrażenie bez użycia składni rozszerzania parametrów. Na przykład,
((wartość2 = val1 * 2))
przypisuje podwójną wartość $wartość1 do parametru o nazwie val2.
Wewnętrzną reprezentację nazwanego parametru w postaci liczb całkowitych można określić za pomocą liczba całkowita
wbudowany. Ocena arytmetyczna jest wykonywana na wartości każdego przypisania do nazwanego
parametr zadeklarowany w ten sposób jako liczba całkowita. Przypisanie liczby zmiennoprzecinkowej do
liczba całkowita powoduje zaokrąglenie w dół do następnej liczby całkowitej.
Podobnie liczby zmiennoprzecinkowe można deklarować za pomocą unosić się wbudowany; istnieją dwa
typy, różniące się jedynie formatem wyjściowym, jak opisano dla skład wbudowany. ten
format wyjściowy można ominąć, stosując podstawienie arytmetyczne zamiast parametru
podstawienie, tj. `${unosić się}' używa zdefiniowanego formatu, ale `$((unosić się))' używa określenia ogólnego
formacie zmiennoprzecinkowym.
Tam, gdzie jest to konieczne, przeprowadzana jest promocja wartości całkowitych do wartości zmiennoprzecinkowych. Ponadto,
jeśli dowolny operator, który wymaga liczby całkowitej (`~', '&', '|', '^', '%', '<<', '>>' i ich
odpowiedniki z przypisaniem) otrzyma argument zmiennoprzecinkowy, zostanie on cichy
zaokrąglona w dół do następnej liczby całkowitej.
Użytkownicy powinni się tego wystrzegać, podobnie jak w przypadku wielu innych języków programowania, ale nie oprogramowania
przeznaczony do obliczeń, ocena wyrażenia w zsh jest wykonywana pojedynczo
a promocja liczb całkowitych do zmiennoprzecinkowych nie występuje tylko w terminach zawierających
liczby całkowite. Typowym skutkiem tego jest podział taki jak 6/8 jest w tym obcięty
zaokrąglana w dół do 0. The FORCE_FLOAT Opcja powłoki może być używana w skryptach lub funkcjach
gdzie wymagana jest ocena zmiennoprzecinkowa.
Zmienne skalarne mogą przechowywać wartości całkowite lub zmiennoprzecinkowe w różnym czasie; nie ma
w tym przypadku pamięć typu numerycznego.
Jeżeli zmienna jest najpierw przypisywana w kontekście liczbowym, bez wcześniejszej deklaracji, zostanie ona przypisana
zostanie domyślnie wpisane jako liczba całkowita or unosić się i zachowaj ten typ, dopóki typ nie będzie
wyraźnie zmieniony lub do końca zakresu. Może to mieć nieprzewidziane konsekwencje.
Na przykład w pętli
dla (( f = 0; f < 1; f += 0.1 )); do
# posługiwać się $f
zrobić
if f nie został jeszcze zadeklarowany, pierwsze przypisanie spowoduje jego utworzenie jako
liczba całkowita i w konsekwencji operacja `f += 0.1' zawsze spowoduje taki wynik
obcięty do zera, w związku z czym pętla nie powiedzie się. Prostym rozwiązaniem byłoby obrócenie
inicjalizacja w `f = 0.0'. Dlatego najlepiej jest deklarować zmienne numeryczne za pomocą
wyraźne typy.
WARUNKOWY WYRAŻENIA
A warunkowy wyrażenie jest używany z [[ polecenie złożone do testowania atrybutów plików
i porównać ciągi. Każde wyrażenie może być zbudowane z jednego lub większej liczby
następujące wyrażenia jednoargumentowe lub binarne:
-a filet
prawda, jeśli filet istnieje.
-b filet
prawda, jeśli filet istnieje i jest specjalnym plikiem blokowym.
-c filet
prawda, jeśli filet istnieje i jest specjalnym plikiem znakowym.
-d filet
prawda, jeśli filet istnieje i jest katalogiem.
-e filet
prawda, jeśli filet istnieje.
-f filet
prawda, jeśli filet istnieje i jest zwykłym plikiem.
-g filet
prawda, jeśli filet istnieje i ma ustawiony bit setgid.
-h filet
prawda, jeśli filet istnieje i jest dowiązaniem symbolicznym.
-k filet
prawda, jeśli filet istnieje i ma ustawiony bit lepki.
-n ciąg
prawdziwe, jeśli długość ciąg jest niezerowe.
-o opcja
true, jeśli nazwa opcji opcja jest włączone. opcja może być pojedynczym znakiem – w takim przypadku
jest to jednoliterowa nazwa opcji. (Zobacz sekcję „Określanie opcji”.)
-p filet
prawda, jeśli filet istnieje i jest specjalnym plikiem FIFO (nazwanym potokiem).
-r filet
prawda, jeśli filet istnieje i jest czytelny dla bieżącego procesu.
-s filet
prawda, jeśli filet istnieje i ma rozmiar większy od zera.
-t fd true, jeśli numer deskryptora pliku fd jest otwarty i powiązany z urządzeniem końcowym.
(Uwaga: fd nie jest opcjonalne)
-u filet
prawda, jeśli filet istnieje i ma ustawiony bit setuid.
-w filet
prawda, jeśli filet istnieje i można go zapisać w bieżącym procesie.
-x filet
prawda, jeśli filet istnieje i jest wykonywalny przez bieżący proces. Jeśli filet istnieje i jest
katalogu, bieżący proces ma uprawnienia do przeszukiwania katalogu.
-z ciąg
prawdziwe, jeśli długość ciąg wynosi zero.
-L filet
prawda, jeśli filet istnieje i jest dowiązaniem symbolicznym.
-O filet
prawda, jeśli filet istnieje i jest własnością efektywnego identyfikatora użytkownika tego procesu.
-G filet
prawda, jeśli filet istnieje i jego grupa odpowiada efektywnemu identyfikatorowi grupy tego procesu.
-S filet
prawda, jeśli filet istnieje i jest gniazdem.
-N filet
prawda, jeśli filet istnieje i jego czas dostępu nie jest nowszy niż czas modyfikacji.
file1 -nie file2
prawda, jeśli file1 istnieje i jest nowszy niż file2.
file1 -ot file2
prawda, jeśli file1 istnieje i jest starszy niż file2.
file1 -jeśli file2
prawda, jeśli file1 oraz file2 istnieją i odnoszą się do tego samego pliku.
ciąg = wzorzec
ciąg == wzorzec
prawda, jeśli ciąg zapałki wzorzec. `==Preferowana jest forma. `=' formularz
zapewnia kompatybilność wsteczną i należy ją uznać za przestarzałą.
ciąg != wzorzec
prawda, jeśli ciąg nie pasuje wzorzec.
ciąg =~ regexp
prawda, jeśli ciąg pasuje do wyrażenia regularnego regexp. Jeśli opcja RE_MATCH_PCRE
ustawiono regexp jest testowany jako wyrażenie regularne PCRE przy użyciu metody zsz/szt moduł,
w przeciwnym razie jest testowany jako rozszerzone wyrażenie regularne POSIX przy użyciu metody zsh/wyrażenie regularne
moduł. Po pomyślnym dopasowaniu niektóre zmienne zostaną zaktualizowane; nie ma żadnych zmiennych
zmieniane, jeśli dopasowanie nie powiedzie się.
Jeśli opcja BASH_REMATCH nie jest ustawiony parametr skalarny MATCH jest ustawiony na
podciąg pasujący do wzorca i parametrów całkowitych MBEGIN oraz ZASZYĆ do
indeks odpowiednio początku i końca meczu w ciągtak, że jeśli
ciąg jest zawarty w zmiennej było wyrażenie `${var[$MBEGIN,$MEND]}' jest
identyczne z `$ MECZ'. Ustawienie opcji KSH_ARRAYS jest szanowany.
Podobnie tablica mecz jest ustawiony na podciągi pasujące do nawiasów
podwyrażenia i tablice zacznij oraz naprawiać do indeksów początku i końca
odpowiednio pozycje podciągów w obrębie ciąg. Tablice nie są ustawione
gdyby nie było podwyrażeń w nawiasach. Na przykład, jeśli ciąg `a
krótki ciąg' jest dopasowywany do wyrażenia regularnego `s(...)t', następnie (zakładając
opcja KSH_ARRAYS nie jest ustawiony) MATCH, MBEGIN oraz ZASZYĆ są `krótki', 3 oraz 7,
odpowiednio, podczas gdy mecz, zacznij oraz naprawiać to tablice z pojedynczym wpisem zawierające
ciągi `Góry', '4' i `6', odpowiednio.
Jeśli opcja BASH_REMATCH jest ustawiona tablica BASH_REMATCH jest ustawiony na podciąg
pasujący do wzorca, po którym następują podciągi pasujące do wzorca ujęte w nawiasy
podwyrażenia we wzorcu.
string1 < string2
prawda, jeśli string1 przychodzi wcześniej string2 na podstawie wartości ASCII ich znaków.
string1 > string2
prawda, jeśli string1 Przyjść po string2 na podstawie wartości ASCII ich znaków.
wyr1 -równe wyr2
prawda, jeśli wyr1 jest liczbowo równy wyr2. Należy pamiętać, że w przypadku czysto numerycznych
porównania, użycie ((...)) wbudowany opisany w sekcji `ARYTMETYKA
OCENA” jest wygodniejsza niż wyrażenia warunkowe.
wyr1 -ne wyr2
prawda, jeśli wyr1 nie jest liczbowo równe wyr2.
wyr1 -lt wyr2
prawda, jeśli wyr1 jest liczbowo mniejsza niż wyr2.
wyr1 -GT wyr2
prawda, jeśli wyr1 jest liczbowo większa niż wyr2.
wyr1 Im wyr2
prawda, jeśli wyr1 jest liczbowo mniejsza lub równa wyr2.
wyr1 -dawać wyr2
prawda, jeśli wyr1 jest liczbowo większa lub równa wyr2.
( exp )
prawda, jeśli exp jest prawdziwy.
! exp prawda, jeśli exp to fałsz.
wyr1 && wyr2
prawda, jeśli wyr1 oraz wyr2 oba są prawdziwe.
wyr1 || wyr2
prawda, jeśli jedno z nich wyr1 or wyr2 jest prawdziwy.
Dla zgodności, jeśli istnieje pojedynczy argument, który nie jest znaczący składniowo,
zazwyczaj zmienna, warunek jest traktowany jako test sprawdzający, czy wyrażenie
rozwija się jako ciąg o niezerowej długości. Innymi słowy, [[ $zmienna ]] jest taki sam jak [[ -n
$zmienna ]]. Zaleca się, aby tam, gdzie to możliwe, stosować drugą, wyraźną formę.
Normalne rozszerzanie powłoki odbywa się na filet, ciąg oraz wzorzec argumenty, ale
wynik każdego rozwinięcia jest ograniczony do pojedynczego słowa, podobnie jak efekt
podwójne cudzysłowy.
Generowanie nazwy pliku nie jest wykonywane w przypadku jakiejkolwiek formy argumentu warunków. Jednakże to
można wymusić w każdym przypadku, gdy obowiązuje normalne rozszerzanie powłoki i gdy opcja jest dostępna
EXTENDED_GLOB działa poprzez użycie jawnego kwalifikatora glob w formie (#Q) na końcu
sznurka. Pomiędzy `. może pojawić się normalne wyrażenie kwalifikatora globq' i
nawias zamykający; jeśli żadne się nie pojawi, wyrażenie nie ma żadnego efektu poza wywołaniem nazwy pliku
Pokolenie. Wyniki generowania nazwy pliku są łączone w jedno słowo,
podobnie jak skutki innych form ekspansji.
To specjalne zastosowanie generowania nazw plików jest dostępne tylko z rozszerzeniem [[ składnia. Jeśli
stan występuje w ciągu [ or test wbudowane polecenia, zamiast tego następuje efekt globowania jako
część normalnego rozwijania wiersza poleceń przed oceną warunku. W tym przypadku
może wygenerować wiele słów, które mogą pomylić składnię polecenia testowego.
Na przykład,
[[ -n plik*(#qN) ]]
generuje status zero wtedy i tylko wtedy, gdy w bieżącym katalogu znajduje się co najmniej jeden plik
zaczynając od ciągu `filet'. Kwalifikator globowania N gwarantuje, że wyrażenie jest
pusty, jeśli nie ma pasującego pliku.
Metaznaki wzorca są aktywne dla wzorzec argumenty; wzory są takie same jak
te używane do generowania nazw plików, patrz zshexpn(1), ale nie ma specjalnego zachowania
`/' ani początkowych kropek i nie są dozwolone żadne kwalifikatory glob.
W każdym z powyższych wyrażeń, jeśli filet ma postać `/dev/fd/n', gdzie n jest
liczba całkowita, wówczas test zastosowany do otwartego pliku, którego numer deskryptora to n, nawet jeśli
podstawowy system nie obsługuje /dev/fd katalogiem.
W formularzach dokonujących porównań numerycznych, wyrażenia exp ulega rozwinięciu arytmetycznemu
jakby były w nim zamknięte $((...)).
Na przykład:
[[ ( -f bla || -f bar ) && $raport = y* ]] && filet istnieje.
testuje, czy którykolwiek plik bla lub plik bar istnieje, a jeśli tak, to wartość parametru
raport zaczyna się od `y'; jeśli cały warunek jest prawdziwy, pojawi się komunikat `filet istnieje.' jest
drukowane.
EKSPANSJA OF PROMPT SEKWENCJE
Sekwencje podpowiedzi podlegają specjalnej formie rozwinięcia. Ten rodzaj ekspansji również jest
dostępne za pomocą -P opcja do wbudowany.
Jeśli PROMPT_SUBST opcja jest ustawiona, najpierw poddawany jest ciąg znaków zachęty parametr
ekspansja, komenda podstawienie oraz arytmetyka ekspansja. Zobaczyć zshexpn(1).
Niektóre sekwencje specjalne mogą zostać rozpoznane w ciągu znaków zachęty.
Jeśli PROMPT_BANG opcja jest ustawiona, a `!' w monicie zostaje zastąpiony bieżącą historią
numer wydarzenia. Dosłowne `!' może być następnie reprezentowany jako `!!'.
Jeśli PROMPT_PERCENT opcja jest ustawiona, niektóre sekwencje specjalne zaczynające się od `%' Czy
rozszerzony. Po wielu znakach ucieczki następuje pojedynczy znak, chociaż niektóre z nich wymagają znaku
opcjonalny argument będący liczbą całkowitą, który powinien pojawić się pomiędzy `%' i kolejny znak
sekwencja. Bardziej skomplikowane sekwencje specjalne są dostępne w celu zapewnienia warunków
ekspansja.
PROSTY PROMPT UCIECZKI
Specjalny znaków
%% `%'.
%) `)'.
Login Informacja
%l Linia (tty), w której użytkownik jest zalogowany, bez `/ dev /' prefiks. Jeśli imię
zaczyna się od `/dev/tty', ten przedrostek jest usuwany.
%M Pełna nazwa hosta komputera.
%m Nazwa hosta aż do pierwszego `.'. Po `. może występować liczba całkowita%', aby określić, jak
pożądanych jest wiele składników nazwy hosta. Z ujemną liczbą całkowitą, na końcu
wyświetlane są składniki nazwy hosta.
%n $NAZWA UŻYTKOWNIKA.
%y Linia (tty), w której użytkownik jest zalogowany, bez `/ dev /' prefiks. To nie
leczyć `/dev/ttyspecjalnie imiona.
Powłoka były
%# `#' jeśli powłoka działa z uprawnieniami, plik `%' Jeśli nie. Równoważny
`%(!.#.%%)'. Dla tych celów definicja słowa „uprzywilejowany” jest taka
efektywny identyfikator użytkownika wynosi zero lub, jeśli obsługiwane są możliwości POSIX.1e, to co
co najmniej jedna zdolność jest wywoływana w zdolności Efektywnej lub Dziedziczonej
wektory.
%? Status powrotu ostatniego polecenia wykonanego tuż przed zachętą.
%_ Status parsera, tj. konstrukcje powłoki (np. `if' i `dla') które mają
został uruchomiony w wierszu poleceń. Jeśli zostanie podana liczba całkowita, będzie to dotyczyło wielu ciągów
zostać wydrukowane; zero, ujemna lub brak liczby całkowitej oznacza wydrukowanie ich tylu, ile jest. Ten
jest najbardziej przydatny w podpowiedziach PS2 dla linii kontynuacyjnych i PS4 do debugowania za pomocą
XTRACE opcja; w tym drugim przypadku będzie działać również nieinteraktywnie.
%^ Stan parsera odwrócony. To jest to samo, co `%_'inne niż zamówienie
sznurków. Często jest używany w RPS2.
%d
%/ Bieżący katalog roboczy. Jeśli po `%', określa liczbę
końcowe komponenty bieżącego katalogu roboczego do pokazania; zero oznacza całość
ścieżka. Ujemna liczba całkowita określa komponenty wiodące, tj %-1d określa
pierwszy komponent.
%~ As %d oraz %/, ale jeśli bieżący katalog roboczy zaczyna się od $ HOME, ta część jest
zastąpiony przez `~'. Co więcej, jeśli jako przedrostek ma nazwany katalog, to
część zastępuje się przez „~', po którym następuje nazwa katalogu, ale tylko wtedy, gdy
wynik jest krótszy niż pełna ścieżka; Widzieć Dynamiczny oraz Statyczny o imieniu katalogi in
zshexpn(1).
%e Głębokość oceny bieżącego pliku źródłowego, funkcji powłoki lub eval. Jest
zwiększana lub zmniejszana za każdym razem, gdy wartość %N jest ustawiony lub przywrócony do a
odpowiednio poprzednią wartość. Jest to najbardziej przydatne do debugowania w ramach $PS4.
%h
%! Numer wydarzenia w aktualnej historii.
%i Numer linii aktualnie wykonywanej w skrypcie, pliku źródłowym lub powłoce
funkcja podana przez %N. Jest to najbardziej przydatne do debugowania w ramach $PS4.
%I Numer linii aktualnie wykonywanej w pliku %x. To jest podobne do %i,
ale numerem linii jest zawsze numer linii w pliku, w którym zdefiniowano kod,
nawet jeśli kod jest funkcją powłoki.
%j Liczba miejsc pracy.
%L Obecna wartość $SHLVL.
%N Nazwa skryptu, pliku źródłowego lub funkcji powłoki, którą obecnie jest Zsh
wykonywanie, w zależności od tego, co zostało uruchomione ostatnio. Jeśli nie ma żadnego, to tak
równoważny parametrowi $0. Po `. może występować liczba całkowita%', aby określić liczbę
końcowych komponentów ścieżki do pokazania; zero oznacza pełną ścieżkę. Ujemna liczba całkowita
określa wiodące komponenty.
%x Nazwa pliku zawierającego aktualnie wykonywany kod źródłowy. Ten
zachowuje się jak %N z tą różnicą, że zamiast tego nie są wyświetlane nazwy funkcji i poleceń eval
plik, w którym zostały zdefiniowane.
%c
%.
%C Końcowy składnik bieżącego katalogu roboczego. Po `. może występować liczba całkowita%'
aby uzyskać więcej niż jeden komponent. Chyba, że `%C' jest używane, oznacza to skrócenie tyldy
wykonany jako pierwszy. Są one przestarzałe jako %c oraz %C odpowiadają %1~ oraz % 1/,
odpowiednio, podczas gdy jawne dodatnie liczby całkowite mają taki sam efekt jak w przypadku
dwie ostatnie sekwencje.
Data oraz czas
%D Data w yy-mm-dd Format.
%T Bieżąca godzina w formacie 24-godzinnym.
%t
%@ Bieżąca godzina w formacie 12-godzinnym, am/pm.
%* Aktualna godzina w formacie 24-godzinnym, z sekundami.
%w Data w dzień-dd Format.
%W Data w mm/dd/yy Format.
%D{ciąg}
ciąg jest sformatowany przy użyciu strftime. funkcjonować. Widzieć strftime.(3) po więcej szczegółów.
Różne rozszerzenia zsh udostępniają liczby bez początkowego zera ani spacji
jest pojedynczą cyfrą:
%f dzień miesiąca
%K godzina dnia na zegarze 24-godzinnym
%L godzina dnia na zegarze 12-godzinnym
Ponadto, jeśli system obsługuje standard POSIX czas dnia wywołanie systemowe, %. zapewnia
dziesiętne ułamki sekundy od epoki z zerami wiodącymi. Domyślnie
podaje się trzy miejsca po przecinku, ale można podać liczbę cyfr do 6
po %; W związku z tym % 6. generuje mikrosekundy. Typowym tego przykładem jest
sformatuj `%D{%H:%M:%S.%.}'.
Rozszerzenie GNU, które zawiera plik `-' pomiędzy % a znak formatu powoduje a
początkowe zero lub spacja do usunięcia są obsługiwane bezpośrednio przez powłokę
formatować znaki d, f, H, k, l, m, M, S oraz y; są dowolne inne znaki formatu
dostarczone do systemu strftime.(3) z dowolnym wiodącym `-' obecny, więc obsługa
jest zależne od systemu. Przekazywane są także dalsze rozszerzenia GNU (lub inne).
strftime.(3) i mogą działać, jeśli system je obsługuje.
Wizualny ruchomości
%B (%b)
Uruchom (zatrzymaj) tryb pogrubienia.
%E Wyczyść do końca linii.
%U (%u)
Uruchom (zatrzymaj) tryb podkreślenia.
%S (%s)
Uruchom (zatrzymaj) tryb wyróżniający.
%F (%f)
Rozpocznij (zatrzymaj) używając innego koloru pierwszego planu, jeśli terminal obsługuje tę funkcję.
Kolor można określić na dwa sposoby: albo jako argument numeryczny, normalnie, albo
przez sekwencję w nawiasach klamrowych następującą po %F, Na przykład %F{czerwony}. W tym drugim przypadku
dozwolone wartości są zgodne z opisem dla fg zle_highlight atrybut; Widzieć
Postać podkreślając in zshzle(1). Oznacza to, że dozwolone są kolory numeryczne
także w drugim formacie.
%K (%k)
Rozpocznij (zatrzymaj) używając innego koloru tła. Składnia jest identyczna
dla %F oraz %f.
%{...%}
Dołącz ciąg jako dosłowną sekwencję ucieczki. Ciąg w nawiasach powinien
nie zmieniaj pozycji kursora. Pary nawiasów mogą się zagnieżdżać.
Dodatni argument numeryczny pomiędzy % i { jest traktowany zgodnie z opisem %G
poniżej.
%G W granicach %{...%} sekwencji, uwzględnić „usterkę”: to znaczy założyć, że pojedynczy
szerokość znaku zostanie wyprowadzona. Jest to przydatne podczas wyprowadzania znaków
w przeciwnym razie powłoka nie będzie poprawnie obsługiwana, na przykład znak alternatywny
ustawione na niektórych terminalach. Znaki, o których mowa, mogą być zawarte w obrębie a %{...%}
sekwencję wraz z odpowiednią liczbą %G sekwencje wskazujące
prawidłowa szerokość. Liczba całkowita pomiędzy `%' i `G' wskazuje szerokość znaku
inny niż jeden. Stąd %{nast%2G%} Wyjścia nast i zakłada, że zajmuje szerokość
dwa standardowe znaki.
Wiele zastosowań %G gromadzić w oczywisty sposób; stanowisko %G is
nieważny. Ujemne liczby całkowite nie są obsługiwane.
Należy pamiętać, że w przypadku stosowania szybkiego obcinania zaleca się podzielenie danych wyjściowych na
w każdym z nich pojedyncze znaki %{...%} grupę tak, aby właściwy punkt obcięcia
może być znaleziony.
WARUNKOWY PODŁAŃCUCHY IN MONITY
%v Wartość pierwszego elementu elementu psvar parametr tablicowy. Po `%'
z liczbą całkowitą daje ten element tablicy. Ujemne liczby całkowite liczą się od
koniec tablicy.
%(x.tekst prawdziwy.fałszywy tekst)
Określa wyrażenie trójskładnikowe. Postać podążająca za x jest arbitralne; the
ten sam znak jest używany do oddzielenia tekstu „prawdziwego” wyniku od tekstu dla
„fałszywy” wynik. Ten separator może nie pojawiać się w pliku tekst prawdziwy, z wyjątkiem części
sekwencja %-ucikowa. `)' może pojawić się w fałszywy tekst jako `%)'. tekst prawdziwy oraz
fałszywy tekst oba mogą zawierać dowolnie zagnieżdżone sekwencje specjalne, w tym dalsze
wyrażenia trójskładnikowe.
Lewy nawias może poprzedzać lub po nim dodatnia liczba całkowita n, który
domyślnie zero. Ujemna liczba całkowita zostanie pomnożona przez -1, chyba że zaznaczono inaczej
poniżej dla `l'. Znak testowy x może być dowolny z poniższych:
! Prawda, jeśli powłoka działa z uprawnieniami.
# Prawda, jeśli efektywny identyfikator użytkownika bieżącego procesu wynosi n.
? Prawda, jeśli status zakończenia ostatniego polecenia brzmiał n.
_ To prawda, jeśli przynajmniej n rozpoczęto budowę powłok.
C
/ Prawda, jeśli bieżąca ścieżka bezwzględna ma co najmniej n elementy względem
katalog główny, stąd / liczy się jako 0 elementów.
c
.
~ Prawda, jeśli bieżąca ścieżka z zamianą prefiksu ma co najmniej n Elementy
w stosunku do katalogu głównego, stąd / liczy się jako 0 elementów.
D Prawda, jeśli miesiąc jest równy n (styczeń = 0).
d Prawda, jeśli dzień miesiąca jest równy n.
e Prawda, jeśli głębokość oceny wynosi co najmniej n.
g Prawda, jeśli efektywny gid bieżącego procesu to n.
j Prawda, jeśli liczba miejsc pracy wynosi co najmniej n.
L To prawda, jeśli SHLVL parametr wynosi co najmniej n.
l To prawda, jeśli przynajmniej n znaki zostały już wydrukowane w bieżącym wierszu.
Kiedy n jest ujemne, przynajmniej prawdziwe abs(n) znaki pozostają przed
przeciwny margines (stąd lewy margines dla SZYBKO).
S To prawda, jeśli SEKUNDY parametr wynosi co najmniej n.
T Prawda, jeśli czas w godzinach jest równy n.
t Prawda, jeśli czas w minutach jest równy n.
v Prawda, jeśli tablica psvar przynajmniej ma n elementy.
V Prawda, jeśli element n tablicy psvar jest ustawiony i niepusty.
w Prawda, jeśli dzień tygodnia jest równy n (niedziela = 0).
%<ciąg<
%>ciąg>
%[xstring]
Określa zachowanie przy obcinaniu pozostałej części ciągu podpowiedzi. Trzeci,
przestarzałe, forma jest równoważna `%xstringx', tj x może być `<' lub `>”. Plik
ciąg zostanie wyświetlony zamiast obciętej części dowolnego ciągu znaków; zanotuj to
nie ulega szybkiej ekspansji.
Argument numeryczny, który w trzeciej formie może wystąpić bezpośrednio po `[',
określa maksymalną dozwoloną długość różnych ciągów, które mogą być wyświetlane
w monicie. W pierwszych dwóch postaciach ten argument liczbowy może być ujemny, np
w tym przypadku długość obcięcia określa się poprzez odjęcie wartości bezwzględnej
argument numeryczny określający liczbę pozostałych pozycji znakowych w pliku
bieżąca linia zachęty. Jeśli daje to długość zerową lub ujemną, długość wynosi 1
Jest używane. Innymi słowy, argument negatywny powoduje, że po obcięciu o godz
najmniej n znaki pozostają przed prawym marginesem (lewy margines dla SZYBKO).
Formularze z `<' obcina po lewej stronie ciągu, a formy z `>'
obciąć po prawej stronie ciągu. Na przykład, jeśli bieżący katalog to
`/dom/szczupak', monit `%8<..<%/' rozwinie się do `..e/szczupak'. W tym ciągu
znak kończący (`<', '>' lub `]'), a właściwie dowolny znak, może być cytowany przez
poprzedzające `\'; uwaga podczas używania -Pjednak, że należy to podwoić jako
ciąg również podlega normie przetwarzanie, oprócz wszelkich
odwrotne ukośniki usunięte przez podwójny cudzysłów: najgorszym przypadkiem jest zatem `
-P "%<\\\\<<..."'.
Jeśli ciąg jest dłuższy niż określona długość obcięcia, pojawi się w
pełny, całkowicie zastępując obcięty ciąg.
Część ciągu podpowiedzi, która ma zostać obcięta, biegnie do końca ciągu lub do
koniec następnej otaczającej grupy `%('konstrukt lub do następnego
obcięcie napotkane na tym samym poziomie grupowania (tj. obcięcie wewnątrz `%('
są oddzielne), co zawsze jest pierwsze. W szczególności obcięcie z argumentem
zero (np. `%<') oznacza koniec zakresu ciągu, który ma zostać obcięty
wyłączając obcinanie od tego momentu. Na przykład monit `%10<...<%~%<<%# '
wypisze skróconą reprezentację bieżącego katalogu, po której następuje `%'
lub `#', po którym następuje spacja. Bez `%<', te dwa znaki byłyby
zawarte w ciągu, który ma zostać obcięty. Zauważ, że `%-0<' nie jest równoważne
`%<', ale określa, że znak zachęty jest obcięty na prawym marginesie.
Obcięcie ma zastosowanie tylko w obrębie poszczególnych wierszy podpowiedzi, zgodnie z ograniczeniami
osadzone znaki nowej linii (jeśli występują). Jeśli całkowita długość dowolnej linii monitu po
obcięcie jest większe niż szerokość końcówki lub jeśli część ma zostać obcięta
zawiera osadzone znaki nowej linii, zachowanie przy obcinaniu jest niezdefiniowane i może ulec zmianie w a
przyszła wersja powłoki. Użyj `%-n(l.tekst prawdziwy.fałszywy tekst)', aby usunąć części
monit, gdy dostępna przestrzeń jest mniejsza niż n.
Korzystaj z zshmisc online, korzystając z usług onworks.net