> Linux Reviews > man >

bash

bash

GNU Bourne-Again SHell


  1. bash.1.man


1. bash.1.man

Manpage of BASH

BASH

Section: User Commands (1)
Updated: 13 listopada 2001
Index Return to Main Contents
 

NAZWA

bash - GNU Bourne-Again SHell  

SKŁADNIA

bash [opcje] [plik]  

COPYRIGHT

Bash is Copyright (C) 1989-2001 by the Free Software Foundation, Inc.  

OPIS

Bash jest zgodnym z sh interpreterem języka poleceń, wykonującym polecenia ze standardowego wejścia bądź z pliku. Włączono doń również przydatne cechy zaczerpnięte z powłoki Korna i powłoki C (ksh i csh).

Bash w zamierzeniu jest implementacją zgodną z POSIX-ową specyfikacją powłok i narzędzi -- IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2).  

OPCJE

Oprócz jednoznakowych opcji powłoki udokumentowanych w opisie wbudowanego polecenia set, bash przy wywołaniu interpretuje poniższe opcje:

-c łańcuch
Jeśli występuje opcja -c, to polecenia odczytywane są z łańcucha. Jeżeli po łańcuchu istnieją argumenty, to są one przypisywane do argumentów pozycyjnych, poczynając od $0.
-r
Jeżeli występuje opcja -r, to powłoka staje się powłoką okrojoną (restricted). Zobacz poniżej POWŁOKAOKROJONA.
-i
Jeżeli występuje opcja -i, to powłoka jest interaktywna.
-s
Jeśli występuje opcja -s lub po przetworzeniu opcji nie pozostają żadne argumenty, to polecenia odczytywane są ze standardowego wejścia. Opcja ta umożliwia na ustawienie parametrów pozycyjnych podczas wywołania powłoki interaktywnej.
-D
Na standardowym wyjściu wypisywana jest lista wszystkich podwójnie cytowanych łańcuchów poprzedzonych znakiem $. Są to łańcuchy będące przedmiotem tłumaczenia języka, gdy bieżącym ustawieniem regionalnym (locale) nie jest C ani POSIX. Implikuje to opcję -n; nie zostaną wykonane żadne polecenia.
[-+]O [opcja_shopt]
opcja_shopt jest jedną z ocpji powłoki akceptowanych przez polecenie wbudowane shopt (zobacz WBUDOWANE POLECENIA POWŁOKI poniżej). Jeśli występuje opcja_shopt, to -O nadaje wartość tej opcji, zaś +O unieważnia ją. Jeżeli nie podano opcji_shopt, to na standardowym wyjściu wypisywane są nazwy i wartości opcji powłoki akceptowanych przez shopt. Jeśli opcją wywołania jest +O, tworzone wyjście jest formatowane w taki sposób, by można było wykorzystać je jako wejście.
--
Zapis -- sygnalizuje koniec opcji i wyłącza dalsze ich przetwarzanie. Argumenty występujące po -- traktowane są jako nazwy plików i argumenty. Argument - jest równoważnikiem --.

Bash interpretuje także wiele opcji wieloznakowych. Jeśli mają zostać rozpoznane, opcje te muszą pojawić się w wierszu poleceń przed opcjami jednoznakowymi,

--dump-po-strings
Równoważne -D, ale wyjście jest w formacie pliku GNU gettext po (portable object).
--dump-strings
Równoważnik -D.
--help
Wyświetla na standardowym wyjściu komunikat o użytkowaniu i pomyślnie kończy pracę.
--init-file plik
--rcfile plik
Wykonuje polecenia z podanego pliku zamiast ze standardowego osobistego pliku inicjującego ~/.bashrc, jeśli powłoka jest interaktywna. Zobacz WYWOŁANIE poniżej.
--login
Sprawia, że bash działa tak, jakby został wywołany jako powłoka zgłoszeniowa (login shell). Zobacz WYWOŁANIE poniżej.
--noediting
Nie używa biblioteki GNU readline do odczytu wierszy poleceń w trybie interaktywnym.
--noprofile
Nie odczytuje ani ogólnosystemowego pliku startowego /etc/profile ani żadnego z osobistych plików inicjujących ~/.bash_profile, ~/.bash_login czy ~/.profile. Domyślnie, bash czyta te pliki gdy jest wywołany jako powłoka zgłoszeniowa (zobacz WYWOŁANIE poniżej).
--norc
Nie odczytuje i nie wykonuje osobistego pliku inicjującego ~/.bashrc jeśli powłoka jest interaktywna. Opcja ta jest domyślnie włączona, jeżeli powłokę wywołano jako sh.
--posix
Zmienia zachowanie bash tam, gdzie operacja domyślna różni się od standardu POSIX 1003.2 tak, by dostosować się do niego (tryb posix).
--restricted
Powłoka staje się okrojona (zobacz POWŁOKA OKROJONA poniżej).
--verbose
Równoważnik opcji -v.
--version
Pokazuje na standardowym wyjściu informację o wersji tego egzemplarza bash i pomyślnie kończy pracę.
 

ARGUMENTY

Jeśli po przetworzeniu opcji pozostają jakieś argumenty, a nie podano ani opcji -c ani -s, to zakłada się, że pierwszy argument jest nazwą pliku zawierającego polecenia powłoki. Jeżeli bash został wywołany w taki sposób, to $0 przypisywana jest nazwa pliku z poleceniami, a parametrom pozycyjnym pozostałe argumenty. Bash odczytuje i wykonuje polecenia z tego pliku, a następnie kończy pracę. Kod zakończenia basha jest wówczas kodem zakończenia ostatniego wykonanego polecenia skryptu. Jeśli nie wykonano żadnego polecenia, to kod zakończenia wynosi 0.  

WYWOŁANIE

Powłoka zgłoszeniowa (login shell) to taka, w której pierwszym znakiem zerowego argumentu jest -, lub taka, którą uruchomiono z opcją --login.

Powłoka interaktywna to taka, którą uruchomiono bez argumentów innych niż opcje i bez opcji -c; zarówno jej standardowe wejście jak i wyjście powiązane jest z terminalami (tak jak określiła to funkcja isatty(3)), albo taka, którą uruchomiono z opcją -i. Jeśli bash jest interaktywny, to ustawiane jest PS1 zaś $- zawiera i; pozwala to skryptowi powłoki lub plikowi startowemu na sprawdzanie tego stanu.

Poniższe akapity opisują, jak bash wykonuje swoje pliki startowe. Jeśli któryś z tych plików istnieje, ale nie może być odczytany, to bash zgłasza błąd. Tyldy (~) w nazwach plików interpretowane są według reguł opisanych poniżej w części Interpretacja tyld sekcji INTERPRETACJA.

Gdy bash wywoływany jest jako powłoka zgłoszeniowa lub jako powłoka nie-interaktywna z opcją --login, w pierwszej kolejności czyta i wykonuje polecenia z pliku /etc/profile, jeśli takowy istnieje. Po odczytaniu tego pliku, szuka ~/.bash_profile, ~/.bash_login i ~/.profile, w tej kolejności, po czym odczytuje i wykonuje polecenia z pierwszego istniejącego i dającego się odczytać. Można posłużyć się opcją --noprofile podczas uruchamiania powłoki, by zakazać takiego zachowania.

Podczas kończenia pracy powłoki zgłoszeniowej, bash czyta i wykonuje polecenia z pliku ~/.bash_logout, jeśli taki istnieje.

Jeżeli uruchamiana jest powłoka interaktywna nie będąca powłoką zgłoszeniową, bash czyta i wykonuje polecenia z ~/.bashrc, jeśli taki plik istnieje. Może to być zakazane za pomocą opcji --norc. Opcja --rcfile plik wymusi odczyt i wykonanie poleceń z pliku zamiast z ~/.bashrc.

Jeśli bash startuje w trybie nie-interaktywnym, na przykład w celu uruchomienia skryptu powłoki, to szuka w środowisku zmiennej BASH_ENV, interpretuje jej wartość, jeśli ją znalazł, i używa otrzymanej wartości jako nazwy pliku do odczytania i wykonania. Bash zachowuje się tak, jakby były wykonane następujące polecenia:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

ale do szukania nazwy pliku nie jest używana wartość zmiennej PATH.

Jeżeli bash wywołano pod nazwą sh, to próbuje on naśladować zachowanie startowe historycznych wersji sh tak ściśle jak to jest możliwe, przy równoczesnym spełnianiu standardu POSIX. Wywołany jako powłoka interaktywna lub powłoka nie-interaktywna z opcją --login, usiłuje na początku odczytać i wykonać polecenia z /etc/profile i ~/.profile, w tej kolejności. W celu zakazania tego zachowania można użyć opcji --noprofile. Wywołany jako powłoka interaktywna pod nazwą sh, bash poszukuje zmiennej ENV, interpretuje jej wartość, jeśli jest zdefiniowana, i posługuje się otrzymaną wartością jako nazwą pliku, który ma być odczytany i wykonany. Ponieważ powłoka wywołana jako sh nie usiłuje czytać ani wykonywać poleceń z jakichkolwiek innych plików startowych, opcja --rcfile nie ma żadnych skutków. Powłoka nie-interaktywna wywołana pod nazwą sh nie próbuje czytać żadnych plików startowych. Wywołany jako sh, bash wchodzi w tryb posix po odczycie plików startowych.

Gdy bash uruchomiony jest w trybie posix, jak z opcją --posix wiersza poleceń, kieruje się standardem POSIX dla plików startowych. W trybie tym, powłoka interaktywna interpretuje zmienną ENV a polecenia odczytywane i wykonywane są z pliku, którego nazwą jest zinterpretowana wartość. Nie są czytane inne pliki startowe.

Bash usiłuje rozstrzygnąć, czy jest uruchomiony przez demona powłoki zdalnej, zwykle rshd. Jeżeli stwierdzi, że został uruchomiony przez rshd, to odczytuje i wykonuje polecenia z ~/.bashrc, jeśli plik ten istnieje i daje się czytać. Nie będzie tego robił wywołany jako sh. Można posłużyć się opcją --norc, by zakazać tego zachowania oraz opcją --rcfile, by wymusić czytanie innego pliku, ale rshd zazwyczaj nie wywołuje powłoki z tymi opcjami ani nie pozwala na ich podanie.

Jeśli powłoka została uruchomiona z efektywnym id użytkownika (grupy) różnym od id rzeczywistego, a nie podano opcji -p, to nie są odczytywane żadne pliki startowe, funkcje powłoki nie są dziedziczone ze środowiska, zmienna SHELLOPTSP, jeśli jest taka w środowisku, jest ignorowana a efektywny identyfikator użytkownika jest ustawiany na jego identyfikator rzeczywisty. Jeśli przy wywołaniu podano opcję -p, to zachowanie startowe jest takie samo, ale nie jest resetowany efektywny id użytkownika.  

DEFINICJE

W pozostałej części tego dokumentu używane są poniższe definicje.

odstęp
Spacja lub znak tabulacji.
słowo
Sekwencja znaków uważana przez powłokę za pojedynczą jednostkę. Znana też jako token.
nazwa
Jest to słowo składające się wyłącznie ze znaków alfanumerycznych i znaków podkreślenia, i rozpoczynające się znakiem alfabetycznym lub podkreśleniem. Wspominane również jako identyfikator.
metaznak
Znak, które, gdy nie jest cytowany, oddziela słowa. Jeden z poniższych:

| & ; ( ) < > spacja tab

operator sterujący
token pełniący funkcję sterującą. Jest to jeden z poniższych symboli:

|| & && ; ;; ( ) | <nowalinia>

 

SŁOWA ZASTRZEŻONE

Słowa zastrzeżone (reserved words) to takie, które mają dla powłoki specjalne znaczenie. Następujące słowa są rozpoznawane jako zastrzeżone, gdy nie są cytowane i występują albo jako pierwsze słowo polecenia prostego (zobacz GRAMATYKA POWŁOKI poniżej) albo trzecie słowo poleceń case lub for;

! case do done elif else esac fi for function if in select then until while { } time [[ ]]  

GRAMATYKA POWŁOKI

 

Polecenia proste

Polecenie proste jest sekwencją opcjonalnych przypisań zmiennych, po której następują rozdzielane przez odstęp słowa i przekierowania, a zakończoną operatorem sterującym. Pierwsze słowo określa polecenie, jakie ma zostać wykonane i jest przekazywane jako argument numer zero. Pozostałe słowa są przekazywane jako argumenty wywoływanego polecenia.

Wartością zwracaną polecenia prostego jest jego kod zakończenia lub 128+n jeżeli polecenie przerwane jest sygnałem n.  

Potoki

Potok jest sekwencją jednego lub więcej poleceń rozdzielonych znakiem |. Formatem potoku jest:

[time [-p]] [ ! ] polecenie [ | polecenie2 ... ]

Standardowe wyjście z polecenia połączone jest za pośrednictem potoku ze standardowym wejściem polecenia2. Połączenie to wykonywane jest przed możliwymi przekierowaniami podanymi dla polecenia (zobacz poniżej PRZEKIEROWANIE.

Jeżeli potok poprzedza zastrzeżone słowo !, to kod zakończenia takiego potoku jest negacją (NOT) kodu zakończenia ostatniego polecenia. W przeciwnym wypadku, kodem potoku jest kod zakończenia ostatniego polecenia. Powłoka oczekuje na zakończenie (terminate) wszystkich poleceń w potoku przed zwróceniem wartości.

Jeżeli potok jest poprzedzony słowem zastrzeżonym time, to po jego zakończeniu podawany jest czas wykonywania, jak również czas użytkownika i czas systemu zużyty na wykonanie. Opcja -p zmienia format tworzonych wyników na określony przez POSIX. Do sformatowania łańcucha określającego, jak powinna być wyświetlana informacja o czasach, można ustawić zmienną TIMEFORMAT; zobacz opis TIMEFORMAT w Zmienne powłoki poniżej.

Każde polecenie w potoku uruchamiane jest jako odrębny proces (tj. w podpowłoce).  

Listy

Lista jest potokiem lub sekwencją kilku potoków rozdzielonych jednym z operatorów ;, &, && lub ||, i opcjonalnie zakończoną jednym ze znaków ;, & lub <nowalinia>.

Spośród tych operatorów listowych, && i || mają ten sam priorytet, następujące po nich ; i &, również mają równy między sobą priorytet.

Jeśli polecenie zakończone jest operatorem sterującym &, to powłoka wykonuje je w tle (background) w podpowłoce. Powłoka macierzysta nie oczekuje na zakończenie polecenia, a zwracany kod wynosi 0. Polecenia oddzielane znakiem średnika ; wykonywane są sekwencyjnie; powłoka oczekuje na zakończenie pracy przez każde z nich po kolei. Zwracany kod jest kodem zakończenia ostatniego wykonanego polecenia.

Operatory sterujące && i || oznaczają odpowiednio listy AND i OR. Lista AND ma postać

polecenie2 wykonywane jest wtedy, i tylko wtedy, gdy polecenie1 zwraca zerowy kod zakończenia.

Lista OR ma postać

polecenie1 || polecenie2

polecenie2 jest wykonywane wtedy, i tylko wtedy, gdy polecenie1 zwraca niezerowy kod zakończenia. Kod zwracany przez listy AND i OR jest kodem zakończenia ostatniego wykonanego polecenia listy.  

Polecenia złożone

Polecenie złożone (compound command) jest jednym z poniższych:

(lista)
lista wykonywana jest w podpowłoce. Przypisania zmiennych i polecenia wbudowane wpływające na środowisko powłoki nie zachowują swoich skutków po zakończeniu polecenia. Zwracanym kodem jest kod zakończenia listy.
{ lista; }
lista jest po prostu wykonywana w bieżącym środowisku powłoki. lista musi być zakończona znakiem nowej linii lub średnika. Nazywane jest to poleceniem grupowania. Zwracanym kodem jest kod zakończenia listy. Należy pamiętać, że w przeciwieństwie do metaznaków ( i ), { i }słowami zastrzeżonymi i aby zostały rozpoznane muszą się pojawić tam, gdzie dozwolone jest użycie słów zastrzeżonych. Ponieważ nie powodują podziału na słowa, muszą być oddzielone od listy za pomocą białego znaku.
((wyrażenie))
wyrażenie interpretowane jest zgodnie z zasadami opisanymi poniżej w sekcji OBLICZANIEWYRAŻEŃARYTMETYCZNYCH. Jeśli wartość wyrażenia jest niezerowa, to kodem zwracanym jest 0; w przeciwnym razie kodem zwracaym jest 1. Jest to ściśle równoważne konstrukcji let "wyrażenie".
[[ wyrażenie ]]
Zwraca kod 0 lub 1 w zależności od interpretacji wyrażenia warunkowego wyrażenie. Wyrażenia złożone są ze składowych (primaries) opisanych poniżej w opcji WYRAŻENIAWARUNKOWE. Na słowach pomiędzy [[ a ]] nie są wykonywane rozwinięcia nazw plików ani podział na słowa; są natomiast wykonywane: interpretacja tyld, parametrów i zmiennych, interpretacja wyrażeń arytmetycznych, podstawianie wyników poleceń, podstawianie wyników procesów i usunięcia cytowań.

Gdy używane są operatory == i !=, łańcuch na prawo od operatora traktowany jest jak wzorzec i dopasowywany zgodnie z zasadami opisanymi poniżej w sekcji Dopasowywanie wzorców. Wartością zwracaną jest 0 jeśli łańcuch odpowiednio pasuje lub nie pasuje do wzorca, zaś 1 w przeciwnym przypadku. Można zacytować dowolną część wzorca w celu wymuszenia dopasowywania jej jako łańcucha.

Wyrażenia można łączyć przy pomocy następujących operatorów, wymienionych w kolejności malejącego priorytetu:

( wyrażenie )
Zwraca wartość wyrażenia. Może służyć do unieważnienia zwykłej kolejności operatorów.
! wyrażenie
Prawda jeżeli wyrażenie jest fałszywe.
wyrażenie1 && wyrażenie2
Prawda jeśli zarówno wyrażenie1 jak i wyrażenie2 są prawdziwe.
wyrażenie1 || wyrażenie2 Prawda jeśli choć jedno spośród wyrażenie1 lub wyrażenie2 jest prawdziwe.

Operatory && i || nie wykonują wyrażenia2 jeżeli wartość wyrażenia1 wystarcza do określenia wartości, jaka zostanie zwrócona przez całe wyrażenie warunkowe.

for nazwa [ in słowo ] ; do lista ; done
Interpretowane są słowa następujące po in, tworząc listę elementów. Zmiennej nazwa nadawana jest kolejno wartość każdego elementu tej listy i każdorazowo wykonywana jest lista poleceń. Jeżeli pominięto in słowo, to polecenie for wykonuje listę po jednym razie dla każdego ustawionego parametru pozycyjnego (zobacz PARAMETRY poniżej). Zwracanym kodem jest kod zakończenia ostatniego wykonanego polecenia. Jeśli interpretacja elementów następujących po in daje w wyniku pustą listę, to nie są wykonywane żadne polecenia i zwracany jest kod 0.
for (( wyr1 ; wyr2 ; wyr3 )) ; do lista ; done
Na początku obliczane jest wyrażenie arytmetyczne wyr1, zgodnie z zasadami opisanymi poniżej w OBLICZANIEWYRAŻEŃARYTMETYCZNYCH. Następnie wielokrotnie obliczane jest wyr2, aż do osiągnięcia przez nie wartości zero. Każdorazowo gdy obliczone wyr2 jest niezerowe, wykonywana jest lista i obliczane jest wyrażenie arytmetyczne wyr3. Jeśli pominięto któreś z wyrażeń, to zachowuje się ono tak, jakby przyjmowało wartość 1. Zwracanym kodem jest kod zakończenia ostatniego wykonanego polecenia listy, lub fałsz jeśli któreś z wyrażeń jest niepoprawne.
select nazwa [ in słowo ] ; do lista ; done
Interpretowana jest lista słów następujących po in, tworząc listę elementów. Zestaw zinterpretowanych słów wypisywany jest na standardowym wyjściu, każde poprzedzone liczbą kolejną. Jeśli pominięto in słowo, to wypisywane są parametry pozycyjne (zobacz PARAMETRY poniżej). Następnie wyświetlana jest zachęta PS3 i czytany jest wiersz ze standardowego wejścia. Jeżeli wiersz składa się z liczby odpowiadającej jednemu z wyświetlonych słów, to zmiennej nazwa przypisywana jest wartość tego słowa. Jeśli wiersz jest pusty, słowa i zachęta wyświetlane są ponownie. Jeżeli odczytano EOF, to polecenie kończy pracę. Każda inna wartość powoduje, że nazwie zostanie przypisany łańcuch pusty. Odczytany wiersz zachowywany jest w zmiennej REPLY. lista wykonywana jest po każdym wyborze, dopóki nie zostanie wykonane polecenie break. Kodem zakończenia select jest kod zakończenia ostatniego wykonanego polecenia listy lub zero jeśli nie wykonano żadnych poleceń.
case słowo in [ [(] wzorzec [ | wzorzec ]
Polecenie case najpierw interpretuje słowo i próbuje dopasować uzyskany wynik każdego z wzorców po kolei, posługując się tymi samymi regułami dopasowywania, co dla rozwijania nazw ścieżkowych (zobacz Rozwijanie nazw ścieżkowych poniżej). Gdy znalezione zostanie dopasowanie, wykonywana jest odpowiadająca mu lista. Po pierwszym dopasowaniu nie są dokonywane próby dopasowania pozostałych wzorców. Jeśli żaden ze wzorców nie pasuje do kodem zakończenia jest zero. W przeciwnym razie jest równy kodowi zakończenia ostatniego z wykonanych poleceń listy.
if lista; then lista; [ elif lista; then lista; ] ... [ else lista; ] fi
Wykonywana jest lista występująca po if. Jeżeli jej kod zakończenia jest zerowy, to wykonywana jest lista klauzuli then. W przeciwnym wypadku, wykonywana jest lista każdego elif po kolei; jeśli kod zakończenia którejś wynosi 0, to wykonywana jest lista then i polecenie jest kończone. Jeżeli nie wystąpił żaden z powyższych przypadków, to wykonywana jest lista występująca po klauzuli else, jeśli takowa istnieje. Kodem zakończenia jest kod ostatniego wykonanego polecenia listy lub zero jeśli żaden z warunków nie okazał się prawdziwy.
while lista; do lista; done
until lista; do lista; done
Polecenie while powtarza wykonywanie listy podanej po do tak długo, jak długo ostatnie polecenie listy while zwraca zerowy kod zakończenia. Polecenie until działa identycznie jak while, poza tym, że warunek jest zanegowany: do lista wykonywane jest tak długo, jak długo ostatnie polecenie listy until zwraca niezerowy kod zakończenia. Kod zakończenia poleceń while i until jest równy kodowi zakończenia ostatniego z wykonanych poleceń listy do lub zeru jeśli żadne nie zostało wykonane.
[ function ] nazwa () { lista; }
Definuje to funkcję nazwaną nazwa. Ciałem funkcji jest lista poleceń zawarta pomiędzy { i }. Lista ta jest wykonywana w za każdym razem gdy nazwa występuje jako polecenie proste. Kodem zakończenia funkcji jest kod zakończenia ostatniego z wykonanych poleceń jej ciała. (Zobacz FUNKCJE poniżej.)
 

KOMENTARZE

W powłoce nie-interaktywnej lub w powłoce interaktywnej, w której włączono opcję interactive_comments do opcji wbudowanych shopt(zobacz WBUDOWANE POLECENIA POWŁOKI poniżej) słowo rozpoczynające się od znaku # powoduje, że słowo to i wszystkie pozostałe znaki w tym wierszu będą ignorowane. Powłoka interaktywna bez włączonej opcji interactive_comments nie pozwala na komentarze. Opcja interactive_comments jest domyślnie włączona w powłokach interaktywnych.  

CYTOWANIE

Cytowanie służy do usuwania specjalnego znaczenia dla powłoki pewnych znaków lub słów. Cytowanie można stosować do wyłączania specjalnego traktowania znaków specjalnych, zapobiegania rozpoznawaniu słów zastrzeżonych jako takich oraz do zapobiegania podstawianiu parametrów.

Każdy z metaznaków podanych powyżej w DEFINICJACH posiada dla powłoki specjalne znaczenie i musi być cytowany, jeśli ma oznaczać samego siebie.

Gdy używane są funkcje interpretacji historii poleceń, znak interpretacji historii, zwykle !, musi być cytowany, jeśli chce się uniknąć interpretacji historii.

Istnieją trzy mechanizmy cytowania: znak specjalny(escapecharacter), apostrofy (pojedyncze cudzysłowy) i cudzysłowy zwykłe (podwójne).

Niecytowany odwrotny ukośnik (\) jest znakiem specjalnym. Chroni on przed interpretacją dosłowną wartość następującego po nim znaku, z wyjątkiem <nowejlinii>. Jeśli pojawi się para \<nowalinia> a sam odwrotny ukośnik nie jest cytowany, to traktowana jest ona jak kontynuacja wiersza (to znaczy, usuwana jest ze strumienia wejściowego i w efekcie ignorowana).

Ujęcie znaków w apostrofy chroni dosłowne wartości każdego z nich. Apostrof nie może pojawić się pomiędzy innymi apostrofami, nawet jeśli jest poprzedzony odwrotnym ukośnikiem.

Ujęcie znaków w cudzysłowy chroni dosłowne wartości każdego z nich, za wyjątkiem $, ` i \. Znaki $ i ` zachowują swe specjalne znaczenie wewnątrz cudzysłowów. Odwrotny ukośnik zachowuje specjalne znaczenie tylko, gdy występuje po nim jeden z poniższych znaków: $, `, ", \ lub <nowalinia>. Cudzysłów może być cytowany wewnątrz cudzysłowów przez poprzedzenie go odwrotnym ukośnikiem.

Parametry specjalne * i @ posiadają specjalne znaczenie wewnątrz cudzysłowów (zobacz PARAMETRY poniżej).

Słowa postaci $'łańcuch' traktowane są specjalnie. Słowo takie interpretowane jako łańcuch, w którym znaki poprzedzone odwrotnym ukośnikiem zastępowane są według standardu ANSI C. Sekwencje specjalne z odwrotnym ukośnikiem, jeśli występują, dekodowane są następująco:

\a
alarm (dzwonek)
\b
backspace
\e
znak escape
\f
znak wysuwu strony (form feed)

znak nowej linii (new line)
\r
powrót karetki (carriage return)
\t
tabulacja pozioma (horizontal tab)
\v
tabulacja pionowa (vertical tab)
\\
odwrotny ukośnik (backslash)
\'
apostrof
\nnn
ośmiobitowy znak, którego wartością jest ósemkowa liczba nnn (jedna do trzech cyfr)
\xnnn
ośmiobitowy znak, którego wartością jest szesnastkowa liczba nnn (jedna do trzech cyfr szesnastkowych)

Przetłumaczony wynik jest pojedynczo cytowany, tak jakby nie było znaku dolara.

Ujęty w cudzysłowy łańcuch poprzedzony znakiem dolara ($) spowoduje, że łańcuch zostanie zinterpretowany zgodnie z bieżącymi ustawieniami regionalnymi (locale). Jeśli ustawione są one na C lub POSIX, to znak dolara jest ignorowany. Jeżeli łańcuch jest tłumaczony i zamieniany, to zastąpienie jest podwójnie cytowane.  

PARAMETRY

Parametr jest elementem przechowującym wartości. Może on być nazwą, liczbą lub jednym ze znaków specjalnych podanych poniżej w sekcji Parametry specjalne. Dla celów powłoki zmienna jest parametrem oznaczanym przez nazwę. Zmienna posiada wartość i zero lub więcej atrybutów. Wartość atrybutom przypisuje się za pomocą polecenia wbudowanego declare (zobacz opis tego polecenia poniżej, w sekcji WBUDOWANEPOLECENIAPOWŁOKI).

Parametr jest ustawiony jeśli przypisano mu wartość. Łańcuch pusty jest poprawną wartością. Po ustawieniu zmiennej, może być ona unieważniona wyłącznie przez użycie wbudowanego polecenia unset (zobacz poniżej WBUDOWANEPOLECENIAPOWŁOKI).

Do zmiennej można wykonać przypisanie przy pomocy instrukcji postaci

nazwa=[wartość]

Jeżeli nie podano wartości, to zmiennej przypisywany jest łańcuch pusty. Wszystkie wartości przechodzą przez interpretację tyld, podstawianie parametrów, interpretację zmiennych, podstawianie wyników poleceń, interpretację wyrażeń arytmetycznych i usuwanie cytowań (zobacz poniżej INTERPRETACJA). Jeżeli zmienna ma ustawiony atrybut integer (całkowita), to wartość podlega interpretacjom wyrażeń arytmetycznych, nawet jeśli nie użyto interpretacji $((...)). Zobacz poniżej Interpretacja wyrażeń arytmetycznych. Nie jest wykonywane dzielenie na słowa, z wyjątkiem "$@", jak wyjaśniono to poniżej w sekcji Parametry specjalne. Nie jest wykonywane rozwijanie nazw plików. Instrukcje przypisania mogą się też pojawiać jako argumenty poleceń wbudowanych declare, typeset, export, readonly i local.  

Parametry pozycyjne

Parametr pozycyjny to parametr określany cyfrą lub cyframi, innymi niż pojedyncza cyfra 0. Parametrom pozycyjnym nadawane są wartości argumentów powłoki (w czasie jej wywołania). Wartości te mogą być ponownie nadawane przy pomocy wbudowanego polecenia set. Do parametrów pozycyjnych nie można wykonać przypisania przy pomocy instrukcji przypisania. Parametry pozycyjne są tymczasowo zastępowane podczas wykonywania funkcji powłoki (zobacz poniżej FUNKCJE). Jeżeli interpretowany jest parametr pozycyjny określany więcej niż jedną cyfrą, to musi być ujęty w nawiasy (zobacz poniżej INTERPRETACJA).  

Parametry specjalne

Powłoka kilka parametrów traktuje specjalnie. Do parametrów tych można się wyłącznie odwoływać; nie jest dozwolone przypisywanie im wartości.

*
Interpretowane jest jako parametry pozycyjne, począwszy od pierwszego. Gdy interpretacja pojawia się wewnątrz cudzysłowów, to parametr ten interpretowany jest jako pojedyncze słowo z wartościami każdego z parametrów rozdzielonymi pierwszym znakiem zmiennej specjalnej IFS. To znaczy, "$*" jest równoważne "$1c$2c...", gdzie c jest pierwszym znakiem wartości zmiennej IFS. Jeżeli IFS nie jest ustawione, to parametry oddzielane są spacjami. Jeśli IFS jest łańcuchem pustym, to parametry są ze sobą połączone bez rozdzielających je separatorów.
@
Interpretowane jako parametry pozycyjne, począwszy od pierwszego. Gdy interpretacja pojawia się wewnątrz cudzysłowów, to każdy parametr interpretowany jest jako odrębne słowo. To znaczy, "$@" jest równoważne "$1" "$2" ... Jeśli nie ma żadnych parametrów pozycyjnych, "$@" i $@ interpretowane są jako nic (tj. są usuwane).
#
Interpretowane jako liczba parametrów pozycyjnych, podana dziesiętnie.
?
Interpretowane jako kod zakończenia ostatnio wykonanego potoku pierwszoplanowego.
-
Interpretowane jako bieżące flagi opcji, takie jakie zostały podane podczas wywołania, ustawione przy pomocy wbudowanego polecenia set lub ustawione przez samą powłokę (tak jak opcja -i).
$
Interpretowany jest jako identyfikator procesu powłoki. W podpowłoce (), interpretowany jest jako ID procesu bieżącej powłoki, nie zaś podpowłoki.
!
Interpretowany jako ID procesu ostatnio wykonywanego polecenia tła (polecenia asynchronicznego).
0
Interpretowany jako nazwa powłoki lub skryptu powłoki. Ustawiane jest to na etapie inicjowania powłoki. Jeżeli bash wywoływany został z plikiem poleceń, to $0 ustawiane jest na nazwę tego pliku. Jeśli bash został uruchomiony z opcją -c, to $0 jest ustawiane na pierwszy argument po łańcuchu, jaki ma zostać wywołany, jeśli taki występuje. W przeciwnym wypadku, ustawiany jest na nazwę pliku użytą do wywołania bash, jaką podaje argument zerowy.
_
Podczas uruchamiania powłoki, ustawiany na bezwzględną nazwę powłoki lub wykonywanego skryptu powłoki przekazanego w liście argumentów. Następnie, interpretowany jest jako ostatni argument poprzedniego polecenia, po interpretacji. Ustawiany również na pełną nazwę pliku każdego polecenia wykonanego i umieszczonego w środowisku eksportowanym do tego polecenia. Podczas sprawdzania poczty parametr ten przechowuje nazwę aktualnie sprawdzanego pliku poczty.
 

Zmienne powłoki

Powłoka ustawia następujące zmienne:

BASH
Interpretowane jako pełna nazwa pliku użyta do wywołania tego przebiegu bash.
BASH_VERSINFO
Zmienna tablicowa tylko do odczytu, której elementy zawierają informacje o wersji uruchomionego bash. Wartości przypisane elementom tablicy są następujące:

BASH_VERSINFO[0]
Główny numer wersji, wydanie (release).
BASH_VERSINFO[1]
Poboczny numer wersji (version).
BASH_VERSINFO[2]
Poziom łat (patch level).
BASH_VERSINFO[3]
Wersja kompilatu (build version).
BASH_VERSINFO[4]
Status wydania (np. beta1).
BASH_VERSINFO[5]
Wartość MACHTYPE.
BASH_VERSION
Interpretowane jako łańcuch opisujący wersję uruchomionego bash.
COMP_CWORD
Indeks w ${COMP_WORDS} słowa zawierającego bieżącą pozycję kursora. Zmienna ta jest dostępna wyłącznie w funkcjach powłoki wywołanych przez usługi programowalnego uzupełniania (zobacz poniżej Programowalne uzupełnianie).
COMP_LINE
Bieżący wiersz poleceń. Ta zmienna jest dostępna tylko w funkcjach powłoki i poleceniach zewnętrznych wywoływanych przez usługi programowalnego uzupełniania (zobacz poniżej Programowalne uzupełnianie).
COMP_POINT
Indeks bieżącej pozycji kursora względem początku bieżącego polecenia. Jeżeli kursor jest na końcu bieżącego polecenia, to wartość tej zmiennej jest równa ${#COMP_LINE}. Ta zmienna jest dostępna tylko w funkcjach powłoki i poleceniach zewnętrznych wywoływanych przez usługi programowalnego uzupełniania (zobacz poniżej Programowalne uzupełnianie).
COMP_WORDS
Zmienna tablicowa (patrz Tablice poniżej) składająca się z pojedynczych słów z aktualnego wiersza poleceń. Zmienna ta jest dostępna wyłącznie w funkcjach powłoki wywołanych przez usługi programowalnego uzupełniania (zobacz poniżej Programowalne uzupełnianie).
DIRSTACK
Zmienna tablicowa (zobacz Tablice poniżej) zawierająca bieżącą zawartość stosu katalogów. Katalogi pojawiają się na stosie w kolejności, w jakiej są wyświetlane przez wbudowane dirs. Przypisanie do elementów tej zmienej tablicowej może posłużyć do zmiany katalogów już występujących na stosie, ale do dodania i usunięcia katalogów muszą być użyte wbudowane pushd i popd. Przypisanie wartości tej zmiennej nie zmieni bieżącego katalogu. Jeśli DIRSTACK jest unieważnione, to traci swe specjalne właściwości, nawet jeżeli jest następnie ponownie ustawione.
EUID
Interpretowane jako efektywny identyfikator bieżącego użytkownika, inicjowane przy uruchamianiu powłoki. Zmienna ta jest tylko do odczytu.
FUNCNAME
Nazwa aktualnie wykonywanej funkcji powłoki. Zmienna ta istnieje tylko podczas wykonywania funkcji powłoki. Próby przypisywania jej wartości nie odnoszą efektu i zwracają kod błędu. Jeżeli FUNCNAME jest unieważnione, to traci swe specjalne właściwości, nawet jeżeli jest następnie ponownie ustawione.
GROUPS
Zmienna tablicowa zawierająca listę grup, których członkiem jest bieżący użytkownik. Próby przypisywania jej wartości nie odnoszą efektu i zwracają kod błędu. Jeżeli GROUPS jest unieważnione, to traci swe specjalne właściwości, nawet jeżeli jest następnie ponownie ustawione.
HISTCMD
Licznik historii (indeks na liście historii poleceń) bieżącego polecenia. Jeżeli HISTCMD jest unieważnione, to traci swe specjalne właściwości, nawet jeżeli jest następnie ponownie ustawione.
HOSTNAME
Automatycznie ustawiane na nazwę aktualnego hosta.
HOSTTYPE
Automatycznie ustawiane na łańcuch unikalnie opisujący typ maszyny, na której jest wykonywany bash. Wartość domyślna zależy od systemu.
LINENO
Przy każdym odwołaniu do tego parametru powłoka zastępuje jego wartość liczbą dziesiętną reprezentującą aktualny kolejny numer wiersza (poczynając od 1) skryptu lub funkcji. Nie zapewnia się, by wartość ta miała znaczenie poza skryptem bądź funkcją. Jeśli LINENO jest unieważnione, to traci swe specjalne właściwości, nawet jeżeli jest następnie ponownie ustawione.
MACHTYPE
Automatycznie ustawiane na łańcuch w pełni opisujący typ systemu, na którym jest wykonywany bash, w standardowym formacie GNU cpu-firma-system. Wartość domyślna zależy od systemu.
OLDPWD
Poprzedni katalog roboczy ustawiony poleceniem cd.
OPTARG
Wartość ostatniego, będącego opcją, argumentu przetworzonego przez wbudowane polecenie getopts (zobacz poniżej WBUDOWANEPOLECENIAPOWŁOKI).
OPTIND
Numer (indeks) następnego argumentu, jaki ma zostać przetworzony przez wbudowane polecenie getopts (zobacz poniżej WBUDOWANEPOLECENIAPOWŁOKI).
OSTYPE
Automatycznie ustawiane na łańcuch opisujący system operacyjny, w którym jest wykonywany bash. Wartość domyślna zależy od systemu.
PIPESTATUS
Zmienna tablicowa (zobacz Tablice poniżej) zwierająca listę kodów zakończenia z procesów w ostatnio wykonywanym potoku pierwszoplanowym (który może zawierać pojedyncze polecenie).
PPID
Identyfikator procesu macierzystego powłoki. Zmienna ta jest tylko do odczytu.
PWD
Bieżący katalog roboczy, ustawiony poleceniem cd.
RANDOM
Za każdym razem, gdy następuje odwołanie do tego parametru, generowana jest całkowita liczba losowa z zakresu od 0 do 32767. Sekwencję liczb losowych można zainicjować przypisując wartość do RANDOM. Jeżeli RANDOM jest unieważniona, to traci swe specjalne właściwości, nawet jeżeli jest następnie ponownie ustawione.
REPLY
Ustawiona na wiersz wejścia odczytany wbudowanym poleceniem read jeśli nie podano żadnych jego argumentów.
SECONDS
Każdorazowo, gdy występuje odwołanie do tego parametru, zwracana jest liczba sekund, jakie upłynęły od wywołania powłoki. Jeżeli do SECONDS zostanie przypisana wartość, to wartość zwracana przez kolejne odwołania równa liczbie sekund od czasu przypisania plus przypisana wartość. Jeżeli SECONDS jest unieważnione, to traci swe specjalne właściwości, nawet jeżeli jest następnie ponownie ustawione.
SHELLOPTS
Lista, rozdzielonych dwukropkami, włączonych opcji powłoki. Każde słowo listy jest poprawnym argumentem opcji -o wbudowanego polecenia set (zobacz WBUDOWANE POLECENIA POWŁOKI poniżej). Opcje pojawiające się w SHELLOPTS to te, które są zgłaszane jako włączone (on) przez set -o. Jeśli zmienna ta istnieje w środowisku podczas uruchamiania bash, to każda z opcji powłoki występująca na tej liście zostanie włączona przed odczytem jakichkolwiek plików startowych. Jest to zmienna tylko do odczytu.
SHLVL
Inkrementowana każdorazowo, gdy uruchamiane jest kolejne wystąpienie bash.
UID
Interpretowane jako identyfikator bieżącego użytkownika, inicjowane przy uruchamianiu powłoki. Zmienna ta jest tylko do odczytu.

Poniższe zmienne są używane przez powłokę. W niektórych przypadkach bash przypisuje im domyślne wartości; przypadki te są odnotowane niżej.

BASH_ENV
Jeżeli parametr ten jest ustawiony podczas wykonywania przez bash skryptu, to jego wartość interpretowana jest jako nazwa pliku zawierającego polecenia do zainicjowania powłoki, jak w ~/.bashrc. Wartość BASH_ENV podlega interpretacji parametrów, podstawianiu wyników poleceń i interpretacjom wyrażeń arytmetycznych przed interpretacją jej jako nazwy pliku. Zmienna PATH nie jest używana do znalezienia pliku o powstałej w ten sposób nazwie.
CDPATH
Ścieżka wyszukiwania dla polecenia cd. Jest to lista rozdzielonych dwukropkami katalogów, w których powłoka szuka katalogów docelowych podanych przez polecenie cd. Przykładową wartością jest ,,.:~:/usr''.
COLUMNS
Używana przez polecenie wbudowane select do wyznaczenia szerokości terminala przy wypisywaniu list wyboru. Ustawiana automatycznie po otrzymaniu SIGWINCH.
COMPREPLY
Zmienna tablicowa, z której bash czyta możliwe uzupełnienia tworzone przez funkcję powłoki wywołaną przez usługę programowalnego uzupełniania (zobacz poniżej Programowalne uzupełnianie).
FCEDIT
Domyślny edytor dla wbudowanego polecenia fc.
FIGNORE
Lista rozdzielonych dwukropkami przyrostków, jakie mają być ignorowane podczas uzupełniania nazw plików (zobacz READLINE poniżej). Nazwa pliku o przyrostku pasującym do jednej z pozycji FIGNORE wyłączana jest z listy dopasowanych nazw plików. Przykładową wartością jest ,,.o:~''.
GLOBIGNORE
Lista rozdzielonych dwukropkami wzorców definiujących zestaw nazw plików, jakie mają być ignorowane podczas rozwijania nazw plików. Jeżeli plik pasujący do wzorca rozwijającego nazwę ścieżkową pasuje również do któregoś z wzorców w GLOBIGNORE, to jest on usuwany z listy dopasowanych.
HISTCONTROL
Jeżeli posiada wartość ignorespace, to wiersze rozpoczynające się od znaku spacji nie są wprowadzane do listy historii. Jeśli posiada wartość ignoredups, to wiersze pasujące do ostatniego wiersza historii nie są wprowadzane. Wartość ignoreboth łączy obie te możliwości. Jeśli zmienna ta nie jest zdefiniowana lub ma wartość inną od powyższych, to wszystkie wiersze przeczytane przez analizator składni zachowywane są w liście historii, stosownie do wartości HISTIGNORE. Funkcja tej zmiennej jest zastąpiona przez HISTIGNORE. Drugi i kolejne wiersze złożonego polecenia wielowierszowego nie są sprawdzane i są dodawane do historii bez względu na wartość
HISTFILE
Nazwa pliku, w którym zachowywana jest historia poleceń (zobacz HISTORIA poniżej). Wartością domyślną jest ~/.bash_history. Jeśli ustawienie tej zmiennej zostanie skasowane, to historia poleceń nie będzie zachowana po zakończeniu pracy powłoki interaktywnej.
HISTFILESIZE
Maksymalna liczba wierszy zawartych w pliku historii. Podczas przypisywania wartości tej zmiennej, jeżeli jest to niezbędne, plik historii jest obcinany tak, by nie zawierał więcej wierszy. Domyślną wartością jest 500. Plik historii jest także obcinany do tego rozmiaru po zapisaniu go w czasie kończenia pracy przez powłokę interaktywną.
HISTIGNORE
Lista rozdzielonych dwukropkami wzorców służących do decydowania, jakie wiersze poleceń powinny być zachowane w liście historii. Każdy z wzorców zakotwiczony jest na początku wiersza i musi pasować do całego wiersza (nie jest dodawane żadne niejawne `*'). Każdy z wzorców sprawdzany jest z bieżącym wierszem po wykonaniu kontroli określonych przez HISTCONTROL. Oprócz zwykłych znaków dopasowywania wzorców używanych przez powłokę, `&' dopasowuje poprzedni wiersz historii. Literał `&' można uzyskać poprzedzając go odwrotnym ukośnikiem; odwrotny ukośnik jest usuwany przed próbą dopasowania. Druga i kolejne wiersze złożonego polecenia wielowierszowego nie są sprawdzane i są dodawane do historii bez względu na wartość HISTIGNORE.
HISTSIZE
Liczba poleceń do zapamiętania w historii poleceń (zobacz HISTORIA poniżej). Wartością domyślną jest 500.
HOME
Katalog domowy bieżącego użytkownika; domyślny argument wbudowanego polecenia cp. Wartość tej zmiennej wykorzystywana jest też przy wykonywaniu interpretacji tyld.
HOSTFILE
Zawiera nazwę pliku o tym samym formacie co /etc/hosts który pownien być czytany, gdy powłoka potrzebuje uzupełnić nazwę hosta. Listę możliwych uzupełnień można zmieniać podczas pracy powłoki. Następnym razem, gdy wykonywana jest próba uzupełnienia nazwy hosta bash dodaje zawartość nowego pliku do już istniejącej listy. Jeżeli HOSTFILE jest ustawione, ale nie posiada wartości, bash usiłuje uzyskać listę możliwych uzupełnień nazw hostów czytając /etc/hosts Gdy HOSTFILE jest unieważniane, lista hostów jest czyszczona.
IFS
Wewnętrzny Separator Pól (Internal Field Separator) używany do podziału na słowa po interpretacjach i dzielenia wierszy na słowa we wbudowanym poleceniu read. Jego domyślną wartością jest ,,<spacja><tabulacja><nowalinia>''.
IGNOREEOF
Steruje działaniem powłoki interaktywnej przy otrzymaniu przez nią znaku EOF jako jedynego znaku wejścia. Jeżeli jest ustawiona, to jej wartość jest liczbą kolejnych znaków EOF jakie muszą być wpisane jako pierwsze znaki wiersza wprowadzania przed zakończeniem pracy przez bash. Jeśli zmienna ta istnieje, ale nie zawiera wartości numerycznej lub nie ma wartości, to wartością domyślną jest 10. Jeżeli nie istnieje, to EOF wskazuje powłoce koniec wprowadzanych danych.
INPUTRC
nazwa pliku startowego dla readline, unieważniająca domyślną ~/.inputrc (zobacz READLINE poniżej).
LANG
Służy do wyznaczania kategorii locale dla wszystkich kategorii nie wyszczególnionych przez zmienne rozpoczynające się od znaków LC_.
LC_ALL
Zmienna ta unieważnia wartość LANG i wszelkich innych zmiennych LC_ określających kategorie locale.
LC_COLLATE
Ta zmienna wyznacza kolejność (collation order) używaną przy sortowaniu wyników rozwijania nazw plików, decyduje też o zachowaniu wielu wyrażeń, klas równoważnych i sekwencje sortowania (collating sequences) w rozwijaniu nazw plików i dopasowywaniu wzorców.
LC_CTYPE
Ta zmienna decyduje o interpretacji znaków i zachowaniu się klas znaków wewnątrz rozwijania nazw plików i dopasowywania wzorców.
LC_MESSAGES
Ta zmienna decyduje o ustawieniu locale używanym do tłumaczenia ujętych w cudzysłowy łańcuchów poprzedzonych znakiem $.
LC_NUMERIC
Ta zmienna określa kategorię locale używaną do formatowania liczb.
LINES
Używana przez polecenie wbudowane select do wyznaczenia długości kolumn przy wypisywaniu list wyboru. Ustawiana automatycznie po otrzymaniu SIGWINCH.
MAIL
Jeżeli parametrowi temu jest przypisana nazwa pliku, a nie jest ustawiona zmienna MAILPATH, to bash informuje użytkownika o nadejściu poczty do podanego pliku.
MAILCHECK
Określa jak często (w sekundach) bash sprawdza pocztę. Domyślnie jest to 60 sekund. Gdy nadchodzi pora sprawdzenia poczty, powłoka wykonuje to przed wyświetleniem głównej zachęty. Jeśli zmienna ta nie jest ustawiona, to powłoka wyłącza sprawdzanie poczty.
MAILPATH
Lista rozdzielonych dwukropkami nazw plików, w jakich ma być sprawdzana poczta. Można podać komunikat, jaki ma zostać wyświetlony, gdy do danego pliku przybędzie wiadomość pocztowa, przez oddzielenie nazwy pliku od komunikatu znakiem '?'. Użyte w tekście komunikatu, $_ interpretowane jest jako nazwa bieżącego pliku pocztowego. Przykład:

MAILPATH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"'

Bash zapewnia tej zmiennej wartość domyślną, ale położenie plików pocztowych użytkownika, jakim się posługuje zależy od systemu (np. /var/mail/$USER).

OPTERR
Jeżeli ustawiono na wartość 1, bash wyświetla komunikaty o błędach generowanych przez wbudowane polecenie getopts (zobacz WBUDOWANE POLECENIA POWŁOKI poniżej). OPTERR inicjowane jest na 1 każdorazowo, gdy wywoływana jest powłoka lub wykonywany jest skrypt powłoki.
PATH
Ścieżka wyszukiwania poleceń. Jest to lista rozdzielanych dwukropkami katalogów, w których powłoka szuka poleceń (zobacz WYKONYWANIE POLECEŃ poniżej). Domyślna ścieżka zależy od systemu i ustawiana jest przez administratora instalującego bash. Powszechną wartością jest ,,/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.''.
POSIXLY_CORRECT
Jeśli podczas uruchamiania bash w środowisku istnieje ta zmienna, to powłoka przed odczytem plików startowych wchodzi w tryb posix, tak jakby przy jej wywołaniu podano opcję --posix. Jeśli zmienna ta zostanie ustawiona podczas pracy powłoki, to bash włącza tryb posix, tak jakby zostało wykonane polecenie set -o posix.
PROMPT_COMMAND
Jeżeli jest ustawiona, to jej wartość jest wykonywana jwko polecenie przed każdym wysłaniem zachęty głównej.
PS1
Wartość tego parametru jest interpretowana (zobacz poniżej ZACHĘTA) i używana jako główny łańcuch zachęty. Jego wartością domyślną jest ,,\s-\v\$ ''.
PS2
Wartość tego parametru jest interpretowana jak PS1 i używana jako wtórny (secondary) łańcuch zachęty. Domyślnie jest to ,,> ''.
PS3
Wartość tego parametru służy jako zachęta w poleceniu select (zobacz powyżej GRAMATYKAPOWŁOKI).
PS4
Wartość tego parametru interpretowana jest jak PS1 i wypisywana przed każdym poleceniem wyświetlanym przez bash podczas śledzenia wykonywania. Pierwszy znak PS4, w razie potrzeby, powtarzany jest wielokrotnie, by wskazać wiele pozionów zagnieżdżenia. Domyślnie jest to ,,+ ''.
TIMEFORMAT
Wartość tego parametru służy jako łańcuch formatu określającego, jak powinna być wyświetlana informacja o czasach dla potoków poprzedzonych słowem zastrzeżonym time. Znak % rozpoczyna sekwencję specjalną, która jest interpretowana jako wartość czasu lub inna informacja. Sekwencje specjalne i ich znaczenie są następujące; nawiasy kwadratowe opisują części opcjonalne.

%%
Literał %.
%[p][l]R
Czas, jaki upłynął, w sekundach.
%[p][l]U
Liczba sekund, jakie CPU zużył w trybie użytkownika.
%[p][l]S
Liczba sekund, jakie CPU zużył w trybie systemowym.
%P
Procent wykorzystania CPU, liczony jako (%U + %S) / %R.
Opcjonalne p jest cyfrą określającą dokładność (precision), liczbę cyfr ułamkowych po kropce dziesiętnej. Wartość zero powoduje, że nie będzie wyświetlana ani kropka dziesiętna ani część ułamkowa. Mogą być podane co najwyżej trzy miejsca po kropce dziesiętnej; wartości p większe od 3 zmieniane są na 3. Jeżeli nie podano p, to używana jest wartość 3.
Opcjonalne Bl określa dłuższy (longer) format wyników, zawierający minuty, w postaci MMmSS.FFs. O tym, czy występuje ułamkowa część sekund decyduje wartość p.
Jeżeli zmienna ta nie jest ustawiona, to bash działa tak, jakby miała ona wartość $'
real\t%3lR
user\t%3lU
sys %3lS'
. Jeżeli jej wartością jest pusty łańcuch, to nie jest wyświetlana żadna informacja o czasach (timing). Podczas wyświetlania łańcucha formatu dodawany jest kończący znak nowej linii.
TMOUT
Jeśli ustawione na wartość większą od zera, to wartość ta jest interpretowana jako liczba sekund określającą czas, przez jaki powłoka ma czekać na wprowadzenie danych po wyświetleniu zachęty. Bash kończy pracę po odczekaniu tego czasu jeśli dane nie pojawiły się.
auto_resume
Zmienna ta steruje sposobem interakcji powłoki z użytkownikiem i sposobem kontroli zadań. Jeżeli jest ustawiona, to jednowyrazowe polecenia proste bez przekierowań traktowane są jako aspirujące do wznowienia istniejącego zatrzymanego zadania. Nie pozwala się na żadną dwuznaczność; jeśli jest więcej niż jedno zadanie rozpoczynające się od wpisanego łańcucha, wybierane jest zadanie, do którego ostatnio sięgano. Nazwa zatrzymanego zadania, w tym kontekście, jest wierszem poleceń użytym do jego uruchomienia. Jeśli posiada wartość exact, to podany łańcuch musi pasować dokładnie do nazwy zatrzymanego zadania; Jeśli jest ustawione na substring, to podany łańcuch powinien pasować do podłańcucha nazwy zatrzymanego zadania. Wartość substring zapewnia funkcjonalność analogiczną do identyfikatora zadania %? (zobacz STEROWANIE ZADANIAMI poniżej). Jeśli ustawiono inną wartość, to podany łańcuch musi być przedrostkiem nazwy zatrzymanego zadania; zapewnia to funkcjonalność analogiczną do identyfikatora zadania %.
histchars
Dwa lub trzy znaki sterujące interpretacją historii i podziałem na leksemy (zobacz poniżej INTERPRETACJAHISTORII). Pierwszy znak jest znakiem interpretacjihistorii, sygnalizującym początek interpretacji historii, zwykle `!'. Drugi znak jest znakiem szybkiego podstawiania , ("quick substitution"), służącym jako skrót do powtórnego uruchamiania poprzednio wprowadzonego polecenia, podstawiającym w poleceniu jeden łańcuch za inny. Domyślnym znakiem szybkiego podstawiania jest `^'. Opcjonalny, trzeci znak jest znakiem wskazującym, że pozostała część wiersza, w którym występuje on jako pierwszy znak słowa, jest komentarzem. Zwykle znakiem tym jest `#'. Znak komentarza historii powoduje, że dla pozostałych słów wiersza podstawianie historii jest pomijane. Niekoniecznie powoduje to traktowanie reszty wiersza jako komentarza przez analizator składni powłoki.
 

Tablice

Bash udostępnia zmienne tablicowe jednowymiarowe. Jako tablica może zostać użyta dowolna zmienna; wbudowane declare jawnie explicitly zadeklaruje tablicę. Nie ma maksymalnego rozmiaru tablic, ani wymagania, by wszystkie jej elementy były indeksowane czy przypisywane w sposób ciągły. Tablice indeksowane są przy pomocy liczb całkowitych, począwszy od zera.

tablica tworzona jest automatycznie jeśli wykonywane jest przypisanie do jakiejś zmiennej przy pomocy składni nazwa[wskaźnik]=wartość. Wskaźnik tablicy traktowany jest jako wyrażenie arytmetyczne, które musi po interpretacji dać liczbę większą bądź równą zero. Chcąc jawnie zadeklarować tablicę, użyj declare -a nazwa (zobacz WBUDOWANE POLECENIA POWŁOKI poniżej). declare -a nazwa[wskaźnik] jest również akceptowane; wskaźnik jest wówczas ignorowany. Dla zmiennej tablicowej można podać atrybuty przy pomocy wbudowanych declare i readonly. Każdy z atrybutów stosowany jest do wszystkich elementów tablicy.

Przypisania do tablic wykonywane są przy pomocy przypisań złożonych postaci nazwa=(wartość1 ... wartośćn), gdzie każda wartość ma postać [wskaźnik]=łańcuch. Wymagany jest wyłącznie łańcuch. Jeżeli podano opcjonalne nawiasy i wskaźnik, to wartość jest przypisywana wskazanemu elementowi tablicy; w przeciwnym wypadku wartość przypisywana jest elementowi o indeksie o jeden większym od ostatniego elementu z przypisaną wartością. Indeksy ropoczynają się od zera. Składnia ta jest akceptowana także przez wbudowane declare. Przypisania do pojedynczych elementów tablicy można wykonywać przy pomocy składni nazwa[wskaźnik]=wartość wprowadzonej powyżej.

Do elementu tablicy można odwoływac się używając ${nazwa[wskaźnik]}. Nawiasy są wymagane, by uniknąć konfliktów z rozwijaniem nazw plików. Jeśli wskaźnikiem jest @ lub *, to powyższe słowo interpretowane jest jako wszystkie elementy nazwy. Wskaźniki te różnią się tylko wtedy, gdy słowo pojawia się w cudzysłowach. Jeśli słowo ujęto w cudzysłowy, to ${nazwa[*]} interpretowane jest jako pojedyncze słowo o wartości wszystkich elementów tablicy rozdzielonych pierwszym znakiem zmiennej specjalnej IFS, zaś ${nazwa[@]} interpretuje każdy z elementów nazwa jako odrębne słowo. Jeśli brak jest elementów tablicy, to ${nazwa[@]} interpretowane jest jako nic. Jest to zachowanie analogiczne do interpretacji parametrów specjalnych * i @ (zobacz powyżej Parametry specjalne). ${#nazwa[wskaźnik]} interpretowane jest jako długość ${nazwa[wskaźnik]}. Jeśli wskaźnikiem jest * lub @, to interpretacją jest liczba elementów w tablicy. Odwoływania się do zmiennej tablicowej bez podania wskaźnika jest równoważne odwołaniu do elementu numer zero.

Do niszczenia tablic służy wbudowane polecenie unset. unset nazwa[wskaźnik] niszczy element tablicy o indeksie wskaźnik. unset nazwa, gdzie nazwa jest tablicą, lub unset nazwa[wskaźnik], gdzie wskaźnikiem jest * lub @, usuwa całą tablicę.

Każde z wbudowanych declare, local i readonly akceptuje opcję -a do określania tablic. Wbudowane read akceptuje opcję -a do przypisywania tablicy listy słów przeczytanych ze standardowego wejścia. set i declare wyświetlają wartości tablicowe w sposób umożliwiający ponowne ich użycie w przypisaniach.  

INTERPRETACJA

Interpretacja wykonywana jest na wierszu poleceń po jego podziale na słowa. Istnieje siedem rodzajów wykonywanych interpretacji: interpretacja nawiasów (brace expansion), interpretacja tyld (tilde expansion), podstawianie parametrów i interpretacja zmiennych (parameter and variable expansion), podstawienie wyników poleceń (command substitution), interpretacja wyrażeń arytmetycznych (arithmetic expansion), podział na słowa (word splitting) i rozwinięcie nazw plików (pathname expansion).

Kolejność interpretacji: interpretacja nawiasów, interpretacja tyld, podstawianie parametrów, interpretacja zmiennych i wyrażeń arytmetycznych i podstawianie wyników poleceń (wykonywane od lewej do prawej), podział na słowa i rozwijanie nazw ścieżkowych.

Na systemach potrafiących to obsłużyć, istnieje dodatkowa dostępna interpretacja: podstawienie wyników procesów (process substitution).

Tylko interpretacja nawiasów, dzielenie na słowa i rozwinięcie nazw plików mogą zmienić liczbę słów interpretowanego wyrażenia; pozostałe interpretacje rozwijają pojedyncze słowo w pojedyncze słowo. Jedynymi wyjątkami są interpretacje "$@" i "${nazwa[@]}" wyjaśnione powyżej (zobacz PARAMETRY).  

Interpretacja nawiasów

Interpretacja nawiasów jest mechanizmem, przez który mogą być generowane dowolne łańcuchy. Mechanizm ten przypomina rozwinięcia nazw plików, ale generowane nazwy plików nie muszą określać plików istniejących. Wzorce, mające podlegać interpretacji nawiasów mają postać opcjonalnej preambuły, po której występują serie separowanych przecinkami łańcuchów pomiędzy parą nawiasów klamrowych, po których następuje opcjonalny dopisek(postscript). Preambuła stanowi przedrostek dla każdego z łańcuchów zawartych w nawiasach, a dopisek dodawany jest do każdego łańcucha wynikowego, przy interpretacji od lewej do prawej.

Interpretacja nawiasów może być zagnieżdżana. Wyniki każdego zinterpretowanego łańcucha nie są sortowane; zachowywana jest kolejność od lewej do prawej. Na przykład, a{d,c,b}e interpretowane jest jako `ade ace abe'.

Interpretacja nawiasów wykonywana jest przed innymi rodzajami interpretacji, a znaki o specjalnym znaczeniu dla innych interpretacji są zachowywane w wyniku. Jest ściśle tekstowa. Bash nie stosuje żadnej interpretacji składniowej do kontekstu interpretacji czy tekstu pomiędzy nawiasami.

Poprawnie zbudowana interpretacja nawiasów musi zawierać niecytowany nawias otwierający i zamykający i co najmniej jeden niecytowany przecinek. Wszelkie niepoprawnie skonstruowane interpretacje nawiasów są pozostawiane bez zmian. { lub , można cytować przy pomocy odwrotnego ukośnika, co chroni je przed przyjmowaniem za część wyrażenia nawiasowego. Dla uniknięcia konfliktu z interpretacją parametrów, łańcuch ${ nie jest traktowany jako spełniający warunki interpretacji nawiasów.

Typowym zastosowaniem tej konstrukcji jest skrót, wtedy gdy wspólny przedrostek łańcuchów do utworzenia jest dłuższy niż w powyżej podanym przykładzie, np.:

mkdir /usr/local/src/bash/{old,new,dist,bugs}

lub
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

Interpretacja nawiasów wprowadza niewielką niezgodność z historycznymi wersjami sh. sh nie traktuje nawiasów otwierających i zamykających w specjalny sposób gdy pojawiają się one jako część słowa, i zachowuje je w wyniku. W bash konsekwencją interpretacji nawiasów jest usuwanie nawiasów ze słów. Na przykład, słowo wprowadzone do sh jako plik{1,2} pojawi się w identycznej postaci na wyjściu. To samo słowo po interpretacji przez bash daje plik1 plik2. Jeżeli pożądana jest ścisła zgodność z sh, uruchom bash z opcją +B lub wyłącz interpretację nawiasów przy pomocy opcji +B polecenia set (zobacz WBUDOWANE POLECENIA POWŁOKI poniżej).  

Interpretacja tyldy

Jeżeli słowo rozpoczyna się niecytowanym znakiem tyldy (`~'), to wszystkie znaki poprzedzające pierwszy niecytowany ukośnik (lub wszystkie znaki, gdy nie ma ukośnika) uważane są za przedrostek tyldy (tilde-prefix). Jeżeli żaden ze znaków w przedrostku tyldy nie jest cytowany, to jego znaki następujące po znaku tyldy traktowane są jako możliwa nazwa logowania (login name). Jeśli ta nazwa logowania jest łańcuchem pustym, to tylda zastępowana jest wartością parametru powłoki HOME. Jeżeli HOME nie jest ustawione, to podstawiany jest za nie katalog domowy użytkownika uruchamiającego powłokę. W przeciwnym wypadku, przedrostek tyldy zastępowany jest katalogiem domowym skojarzonym z określoną nazwą logowania.

Jeśli przedrostkiem tyldy jest `~+', to jest on zastępowany wartością zmiennej PWDpowłoki. Jeśli przedrostkiem tyldy jest `~-', to jest on zastępowany wartością zmiennej powłoki OLDPWD, jeśli jest ona ustawiona. Jeżeli występujące w przedrostku po tyldzie znaki składają się z liczby N, opcjonalnie poprzedzonej przez `+' lub `-', to przedrostek tyldy zastępowany jest odpowiednim elementem stosu katalogów, jaki zostałby wyświetlony przez wbudowane dirs, wywołane z przedrostkiem tyldy jako argumentem. Jeżeli w przedrostku tyldy znaki występujące po tyldzie składają się z liczby bez początkowego `+' lub `-', to przyjmowane jest `+'.

Jeśli nazwa logowania jest nieprawidłowa lub interpretacja tyldy nie powiodła się, to słowo z tyldą pozostaje niezmienione.

Każde z przypisań do zmiennej sprawdzane jest na obecność niecytowanych przedrostków tyldy występujących bezpośrednio po : lub =. W tych przypadkach również jest wykonywana jest interpretacja tyldy. Na skutek tego, można posługiwać się nazwami plików z tyldami w przypisaniach do PATH, MAILPATH i CDPATH, a powłoka przypisze zinterpretowaną wartość.  

Podstawianie parametrów

Znak `$' wprowadza podstawianie parametrów, podstawianie wyników poleceń i interpretację wyrażeń arytmetycznych. Podlegająca interpretacji nazwa parametru lub symbol mogą być ujęte w nawiasy klamrowe, które są opcjonalne, ale służą do ochrony interpretowanej zmiennej przed znakami, jakie występują bezpośrednio po niej, a które mogłyby zostać zinterpretowane jako część nazwy.

Gdy używane są nawiasy, pasującym nawiasem kończącym jest pierwszy `}', nie chroniony przez odwrotny ukośnik, nie znajdujący się wewnątrz cytowanego łańcucha ani osadzony w wyrażeniu arytmetycznym, podstawieniu wyniku polecenia czy podstawieniu parametru.

${parametr}
Podstawiana jest wartość parametru. Nawiasy wymagane są gdy parametr jest parametrem pozycyjnym o więcej niż jednej cyfrze, lub gdy po parametrze występuje znak, który nie powinien być interpretowany jako część jego nazwy.

Jeżeli pierwszym znakiem parametru jest wykrzyknik, to rozpoczyna on poziom zagnieżdżenia zmiennej pośredniej. Bash posługuje się wartością zmiennej utworzonej z reszty parametru jako nazwą zmiennej; zmienna ta jest następnie interpretowana a w dalszym podstawianiu używana jest otrzymana wartość zamiast wartości samego parametru. Znane jest to jako interpretacja pośrednia (indirect expansion). Wyjątkiem jest tu interpretacja ${!przedrostka*} opisana poniżej.

W każdym z poniższych przypadków, słowo podlega interpretacji tyldy, podstawianiu parametrów, podstawianiu wyników poleceń i interpretacji wyrażeń arytmetycznych. Gdy nie przeprowadza interpretacji podłańcuchów, bash sprawdza czy parametr nie jest pusty lub nieustawiony;

${parametr:-słowo}
Używa wartości domyślnych. Jeżeli parametr jest nieustawiony lub pusty, to podstawiane jest zinterpretowane słowo. W przeciwnym razie, podstawiana jest wartość parametru.
${parametr:=słowo}
Przypisuje wartości domyślne. Jeżeli parametr jest nieustawiony lub pusty, to jest mu przypisywane zinterpretowane słowo. Następnie podstawiana jest wartość parametru. Nie można w ten sposób przypisywać wartości parametrom pozycyjnym ani parametrom specjalnym.
${parametr:?słowo}
Wyświetla błąd jeśli pusty lub nieustawiony. Jeżeli parametr jest nieustawiony lub pusty, to na standardowe wyjście błędów zapisywane jest zinterpretowane słowo (lub komunikat o takim wyniku, jeśli brak słowa). Jeśli powłoka nie jest interaktywna, to kończy pracę. W przeciwnym wypadku, podstawiana jest wartość parametru.
${parametr:+słowo}
Używa wartości alternatywnej. Jeżeli parametr jest nieustawiony lub pusty, to nic nie jest podstawiane, w przeciwnym razie podstawiane jest zinterpretowane słowo.
${parametr:offset}
${parametr:offset:długość}
Interpretacja podłańcuchów. Interpretuje co najwyżej długość znaków parametru poczynając od znaków określonych przez offset. Jeśli pominięto długość, to interpretuje podłańcuch parametru poczynając od znaku określonego przez offset. długość i offset są wyrażeniami arytmetycznymi (zobacz OBLICZANIE WYRAŻEŃ ARYTMETYCZNYCH poniżej). długość musi dawać w wyniku liczbę większą bądź równą zero. Jeżeli offset daje w wyniku liczbę mniejszą od zera, to uzyskana wartość używana jest jako offset liczony od końca wartości parametru. Jeżeli parametrem jest @, to wynikiem jest długość parametrów pozycyjnych, począwszy od offset. Jeżeli parametr jest nazwą tablicy indeksowanej przez @ lub *, to wynikiem jest długość członków tablicy począwszy od ${parametr[offset]}. Indeksowanie podłańcucha rozpoczyna się od zera, chyba że używane są parametry pozycyjne, wówczas indeksowanie zaczyna się od 1.
${!przedrostek*}
rozwija się w listę nazw tych zmiennych, których nazwy rozpoczynają się od przedrostka, rozdzielonych od siebie pierwszym znakiem zmiennej specjalnej IFS.
${#parametr}
Podstawiana jest długość, w znakach, wartości parametru. Jeżeli parametrem jest * lub @, wartość podstawiana jest liczbą parametrów pozycyjnych. Jeżeli parametr jest nazwą tablicy o indeksowanej przez * lub @, wartość podstawiana jest liczbą elementów tablicy.
${parametr#słowo}
${parametr##słowo}
słowo jest interpretowane tworząc wzorzec, tak samo jak przy rozwijaniu nazw plików. Jeżeli wzorzec pasuje do początku wartości parametru, to wynikiem interpretacji jest zinterpretowana wartość parametru z usuniętym najkrótszym (przypadek ,,#'') lub najdłuższym (przypadek ,,##'') pasującym wzorcem. Jeżeli parametrem jest @ lub *, to operacja usunięcia wzorca stosowana jest do każdego po kolei parametru pozycyjnego, zaś wynikiem interpretacji jest powstała lista. Jeśli parametr jest zmienną tablicową indeksowaną przez @ lub *, operacja usuwania wzorca jest przeprowadzana po kolei na każdym elemencie tablicy, zaś wynikiem interpretacji jest powstała lista.
${parametr%słowo}
${parametr%%słowo}
słowo jest interpretowane tworząc wzorzec, tak samo jak przy rozwijaniu nazw plików. Jeżeli wzorzec pasuje do końcowej części zinterpretowanego parametru, wynikiem interpretacji jest zinterpretowana wartość parametru z usuniętym najkrótszym (przypadek ,,%'') lub najdłuższym (przypadek ,,%%'') pasującym wzorcem. Jeżeli parametrem jest @ lub *, to operacja usunięcia wzorca stosowana jest do każdego po kolei parametru pozycyjnego, zaś wynikiem interpretacji jest powstała lista. Jeśli parametr jest zmienną tablicową indeksowaną przez @ lub *, operacja usuwania wzorca jest przeprowadzana po kolei na każdym elemencie tablicy, zaś wynikiem interpretacji jest powstała lista.
${parametr/wzorzec/łańcuch}
${parametr//wzorzec/łańcuch}
wzorzec jest interpretowany tworząc wzorzec, tak samo jak przy rozwijaniu nazw plików. Interpretowany jest parametr, a najdłuższe dopasowanie wzorca do jego zinterpretowanej wartości zastępowane jest łańcuchem. W pierwszej postaci, zastępowane jest tylko pierwsze dopasowanie. Druga postać powoduje zastąpienie wszystkich dopasowań wzorca łańcuchem. Jeżeli wzorzec rozpoczyna się od #, to musi pasować do początku zinterpretowanej wartości parametru. Jeżeli pattern rozpoczyna się od %, to musi pasować do końca zinterpretowanej wartości parametru. Jeśli łańcuch jest pusty, to dopasowania wzorca są usuwane a / występujące po wzorcu można pominąć. Jeżeli parametrem jest @ lub *, to operacja podstawiania stosowana jest do każdego po kolei parametru pozycyjnego, zaś wynikiem interpretacji jest powstała lista. Jeśli parametr jest zmienną tablicową indeksowaną przez @ lub *, operacja podstawiania jest przeprowadzana po kolei na każdym elemencie tablicy, zaś wynikiem interpretacji jest powstała lista.
 

Podstawianie wyników poleceń

Podstawianie wyników poleceń (command substitution) pozwala na zastępowanie nazwy polecenia wyjściem (wynikiem) z jego działania. Posiada dwie postaci:

$(polecenie)

lub
`polecenie`

Bash wykonuje interpretację wykonując polecenie i zastępując podstawiane polecenie jego utworzonym standardowym wyjściem, z usuniętymi końcowymi znakami nowej linii. Zawarte wewnątrz wyniku znaki nowej linii nie są usuwane, ale nogą być usunięte podczas podziału na słowa. Podstawienie wyniku polecenia $(cat plik) można zastąpić równoważnym, ale szybszym $(< plik).

Gdy używane jest podstawianie w starym stylu, z użyciem odwrotnych apostrofów, odwrotny ukośnik zachowuje swe znaczenie dosłowne, z wyjątkiem przypadków, gdy poprzedza on $, ` lub \. Pierwszy odwrotny apostrof (`) nie poprzedzony odwrotnym ukośnikiem kończy podstawianie wyniku polecenia. Podczas posługiwania się postacią $(polecenie), polecenie tworzą wszystkie znaki pomiędzy nawiasami; żaden nie jest traktowany specjalnie.

Podstawianie wyników poleceń może być zagnieżdżane. W celu zagnieżdżenia postaci z odwrotnymi apostrofami zabezpiecz wewnętrzne przed interpretacją używając odwrotnych ukośników.

Jeżeli podstawianie pojawia się wewnątrz cudzysłowów, to na wynikach nie jest przeprowadzany podział na słowa ani rozwinięcie nazw plików.  

Interpretacja wyrażeń arytmetycznych

Interpretacja wyrażeń arytmetycznych pozwala na obliczanie wyrażeń arytmetycznych i podstawianie wyniku. Format interpretacji arytmetycznej:

$((wyrażenie))

wyrażenie traktowane jest tak, jakby było ujęte w cudzysłowy, ale cudzysłów wewnątrz nawiasów nie jest traktowany specjalnie. Wszystkie tokeny w wyrażeniu podlegają interpretacji parametrów, interpretacji łańcuchów, podstawianiu wyników poleceń i usuwaniu cudzysłowów.

Interpretacja przeprowadzana jest zgodnie z zasadami podanymi poniżej w sekcji OBLICZENIAARYTMETYCZNE. Jeżeli wyrażenie jest nieprawidłowe, bash wypisuje komunikat o niepowodzeniu i nie występuje żadne podstawienie.  

Podstawianie wyników procesów (Process substitution)

Podstawianie wyników procesów obsługiwane jest na systemach obsługujących potoki nazwane (FIFO) lub metodę /dev/fd nazywania otwartych plików. Przybiera ono postać <(lista) lub >(lista). Proces lista uruchamiany jest z wejściem i wyjściem podłączonym do FIFO lub jakiegoś pliku w /dev/fd. W wyniku interpretacji nazwa tego pliku przesyłana jest jako argument bieżącego polecenia. Jeżeli posłużono się postacią >(lista), zapis do pliku będzie stanowić wejście dla listy. Jeżeli posłużono się postacią <(lista), plik przekazany jako argument powinien zostać odczytany w celu uzyskania wyjścia listy.

Gdy jest to możliwe, podstawianie wyników procesu wykonywane jest równocześnie z interpretacją parametrów i zmiennych, podstawianiem wyników poleceń i interpretacją wyrażeń arytmetycznych.  

Podział na słowa

Powłoka przeszukuje wyniki interpretacji parametrów, podstawiania poleceń i interpretacji wyrażeń arytmetycznych, które nie pojawiają się wewnątrz cudzysłowów, w celu przeprowadzenia podziału na słowa.

Powłoka traktuje każdy znak IFS jak separator i w miejscu ich występowania dzieli na słowa wyniki innych interpretacji. Jeżeli IFS nie jest ustawione lub jego wartością jest dokładnie <spacja><tab><nowalinia>, wartość domyślna, to do podziału na słowa służy dowolna sekwencja znaków IFS. Jeżeli IFS posiada wartość inną niż domyślna, to sekwencje białych znaków spacji i tabulacji są ignorowane na początku i końcu słowa, dopóki biały znak występuje w wartości IFS (biały znak IFS). Inne znaki w IFS nie będące białymi znakami IFS, łącznie z dowolnymi przyległymi białymi znakami IFS, ograniczają pole. Sekwencja białych znaków IFS jest również traktowana jako ogranicznik. Jeśli IFS jest łańcuchem pustym, to nie występuje podział na słowa.

Jawnie puste argumenty ("" lub '') są pozostawiane. Niecytowane argumenty puste niejawnie, wynikające z interpretacji parametrów nie posiadających wartości, są usuwane. Jeśli parametr bez wartości interpretowany jest wewnątrz cudzysłowów, to wynikiem jest argument pusty i jest on zachowywany.

Zauważ, że jeśli nie występuje interpretacja, to nie jest również wykonywany podział.  

Rozwijanie nazw plików (Pathname Expansion)

Po podziale na słowa, jeżeli nie ustawiona została opcja -f, przegląda każde słowo w poszukiwaniu znaków *, ? i [. Jeśli pojawia się jeden z nich, to słowo uważane jest za wzorzec i zastępowane jest posortowaną alfabetycznie listą nazw plików pasujących do wzorca. Jeżeli nie znaleziono pasujących nazw a wyłączona jest opcja nullglob powłoki, słowo pozostawiane jest bez zmian. Jeżeli nullglob jest włączone, a nie znaleziono dopasowań, to słowo jest usuwane. Jeżeli włączona jest opcja nocaseglob powłoki, to dopasowywanie wzorca wykonywane jest bez zwracania uwagi na wielkość liter. Gdy do rozwinięcia nazw plików używa się wzorca, to znak ,,.'' na początku nazwy lub bezpośrednio po ukośniku musi zostać dopasowany dosłownie, chyba że ustawiono opcję dotglob powłoki. Podczas dopasowywania nazwy pliku znak ukośnika musi zawsze zostać dopasowany dosłownie. W pozostałych przypadkach, kropka ,,.'' nie jest traktowana specjalnie. Zobacz poniżej opis shopt w sekcji WBUDOWANEPOLECENIAPOWŁOKI, gdzie znajdziesz omówienie opcji powłoki nocaseglob, nullglob i dotglob.

Do ograniczenia zestawu nazw plików pasujących do wzorca można wykorzystać zmienną powłoki GLOBIGNORE. Jeżeli GLOBIGNORE jest ustawione, każda z pasujących nazw plików pasująca również do jednego ze wzorców w GLOBIGNORE jest usuwana z listy dopasowań. Nazwy plików ,,.'' i ,,..'' są zawsze ignorowane, nawet gdy GLOBIGNORE jest ustawione. Jednakże, ustawienie GLOBIGNORE skutkuje włączeniem opcji dotglob, tak że będą dopasowywane wszystkie inne nazwy plików rozpoczynające się od kropki. W celu uzyskania starego zachowania, ignorującego nazwy zaczynające się ,,.'', jednym ze wzorców w GLOBIGNORE należy zrobić ,,.*'' . Opcja dotglob jest wyłączana, gdy kasowane jest GLOBIGNORE .

Dopasowanie wzorca

Każdy znak pojawiający się we wzorcu, różnych od specjalnych znaków wzorca opisanych poniżej, dopasowuje sam siebie. Znak NUL nie może wystąpić we wzorcu. Specjalne znaki wzorca muszą być cytowane, jeżeli mają być dopasowane dosłownie.

Specjalne znaki wzorca mają następujące znaczenie:

*
Dopasowuje dowolny łańcuch, łącznie z łańcuchem pustym.
?
Dopasowuje dowolny pojedynczy znak.
[...]
Dopasowuje jeden z ujętych w nawiasy kwadratowe znaków. Para znaków rozdzielona myślnikiem opisuje wyrażenie zakresu; dopasowywany jest nim dowolny znak, który przy sortowaniu leksykalnym, z zastosowaniem bieżącego ustawienia locale i zestawu znaków, wypada między tymi dwoma znakami, włącznie z nimi. Jeżeli pierwszym znakiem występującym po [ jest ! lub ^, to dopasowywany jest dowolny znak nie zawarty w nawiasach. Kolejność sortowania znaków w wyrażeniach zakresu określona jest przez bieżące ustawienie locale i wartość zmiennej środowiskowej LC_COLLATE, jeśli istnieje. Znak - można dopasować włączając go jako pierwszy lub ostatni ze znaków zestawu. Znak ] można dopasować włączając go jako pierwszy znak zestawu.

Wewnątrz [ i ], można podawać klasy znaków (character classes), używając składni [:klasa:], gdzie klasa jest jedną z poniższych klas zdefiniowanych w standardzie POSIX.2:

alnum alpha ascii blank cntrl digit graph lower print punct space upper xdigit
Klasa znaków dopasowuje dowolny znak należący do tej klasy.

Wewnątrz [ i ], można podać klasę równoważności, używając składni [=z=], która dopasowuje wszystkie znaki o tej samej wadze sortowania (zdefiniowaną w bieżącym ustawieniu locale) co znak z.

Wewnątrz [ i ], składnia [.symbol.] dopasowuje symbol sortowania (collating symbol) symbol.

Jeżeli przy pomocy wbudowanego shopt włączono opcję extglob, to rozpoznawane jest kilka rozszerzonych operatorów dopasowania wzorców. W poniższym opisie, lista-wzorców jest listą złożoną z jednego lub więcej wzorców rozdzielonych znakiem |. Wzorce złożone można konstruować przy pomocy jednego lub więcej poniższych pod-wzorców:

?(lista-wzorców)
Dopasowuje zero lub jedno wystąpienie zadanych wzorców
*(lista-wzorców)
Dopasowuje zero lub więcej wystąpień zadanych wzorców
+(lista-wzorców)
Dopasowuje jedno lub więcej wystąpień zadanych wzorców
@(lista-wzorców)
Dopasowuje dokładnie jeden z zadanych wzorców
!(lista-wzorców)
Dopasowuje cokolwiek prócz jednego z zadanych wzorców
 

Usunięcie cytowań

Po poprzednich interpretacjach, wszystkie niecytowane wystąpienia znaków \, ' i ", które nie wynikły z jednej z powyższych interpretacji, są usuwane.  

PRZEKIEROWANIE

Przed wykonaniem polecenia, jego wejście i wyjście mogą zostać przekierowane przy pomocy specjalnej notacji interpretowanej przez powłokę. Przekierowań można też używać do otwierania i zamykania plików dla środowiska wykonywania bieżącej powłoki. Poniższe operatory przekierowania mogą występować przed lub pojawiać się gdziekolwiek wewnątrz polecenia prostego lub występować po poleceniu. Przekierowania przetwarzane są w kolejności występowania, od lewej do prawej.

W poniższych opisach, jeśli pominięto deskryptor pliku, a pierwszym znakiem operatora przekierowania jest <, przekierowanie dotyczy standardowego wejścia (deskryptor pliku 0). Jeżeli pierwszym znakiem operatora przekierowania jest >, przekierowanie dotyczy standardowego wyjścia (deskryptor pliku 1).

Słowo następujące do operatorze przekierowania w poniższych opisach podlega, chyba że podano inaczej, interpretacji nawiasów, interpretacji tyldy, interpretacji parametrów, podstawianiu wyników poleceń, interpretacji wyrażeń arytmetycznych, usuwaniu cytowań, rozwijaniu nazw plików i podziałowi na słowa. Jeśli zinterpretowane zostanie jako więcej niż jedno słowo, to bash zgłosi błąd.

Zauważ, że kolejność przekierowań jest znacząca. Na przykład, polecenie

ls > dirlist 2>&1

kieruje zarówno standardowe wyjście jak i wyjście diagnostyczne (stderr) do pliku dirlist, podczas gdy polecenie

ls 2>&1 > dirlist

kieruje tylko standardowe wyjście do pliku dirlist, gdyż wyjście błędów zostało zduplikowane jako standardowe wyjście przed przekierowaniem wyjścia do dirlist.

Bash obsługuje kilka nazw plików w sposób specjalny gdy są one użyte w przekierowaniach. Opisano to w poniższej tablicy:

/dev/fd/fd
Jeżeli fd jest poprawną liczbą całkowitą, to duplikowany jest deskryptor pliku fd.
/dev/stdin
Duplikowany jest deskryptor pliku 0.
/dev/stdout
Duplikowany jest deskryptor pliku 1.
/dev/stderr
Duplikowany jest deskryptor pliku 2.
/dev/tcp/host/port
Jeśli host jest poprawną nazwą hosta lub adresem internetowym, a port jest liczbą całkowitą określającą numer portu lub nazwą usługi, to bash usiłuje otworzyć połączenie TCP do odpowiedniego gniazda.
/dev/udp/host/port
Jeśli host jest poprawną nazwą hosta lub adresem internetowym, a port jest liczbą całkowitą określającą numer portu lub nazwą usługi, to bash usiłuje otworzyć połączenie UDP do odpowiedniego gniazda.

Nieudane otwarcie lub utworzenie pliku powoduje niepowodzenie przekierowania.  

Przekierowanie wejścia

Przekierowanie wejścia powoduje otwarcie do odczytu pliku, którego nazwa wynika z interpretacji słowa. Odczyt będzie wykonywany z deskryptora pliku n lub standardowego wejścia (zerowy deskryptor pliku) jeśli nie podano n.

Ogólny format przekierowania wejścia:

[n]<słowo

 

Przekierowanie wyjścia

Przekierowanie wyjścia powoduje otwarcie do zapisu pliku, którego nazwa wynika z interpretacji słowa. Zapis będzie wykonywany z deskryptora pliku n lub standardowego wyjścia (deskryptor pliku 1) jeśli nie podano n. Jeżeli plik nie istnieje jest tworzony; jeżeli istnieje obcinany jest do rozmiaru zerowego.

Ogólny format przekierowania wyjścia:

[n]>słowo

Jeżeli operatorem przekierowania jest >, a została włączona opcja noclobber wbudowanego polecenie set, to przekierowanie nie powiedzie się jeżeli plik o nazwie wynikającej z interpretacji słowa istnieje i jest zwykłym plikiem. Jeżeli operatorem przekierowania jest >|, albo operatorem jest > przy niewłączonej opcji noclobber, to wykonywana jest próba przekierowania, nawet jeśli plik słowo istnieje.  

Dołączanie przekierowanego wyjścia

Przekierowanie wyjścia w ten sposób powoduje, że plik o nazwie wynikającej z interpretacji słowa zostanie otwarty do dołączania (append). Dołączanie będzie wykonywane z deskryptora pliku n lub standardowego wyjścia (deskryptor pliku 1) jeśli nie podano n. Jeżeli plik nie istnieje jest tworzony.

Ogólny format dołączania wyjścia:

[n]>>słowo

 

Przekierowanie standardowego wyjścia i wyjścia błędów

Bash pozwala, przy pomocy tej konstrukcji, przekierować standardowe wyjście (deskryptor pliku 1) i standardowe wyjście błędów (deskryptor plików 2) do pliku, którego nazwą jest zinterpretowane słowo.

Istnieją dwie postaci takiego przekierowania:

&>słowo

i
>&słowo

Spośród nich, zalecaną jest pierwsza forma. Jest ona semantycznie równoważna

>słowo 2>&1

 

Dokumenty włączone (Here Documents)

Ten typ przekierowania instruuje powłokę, by czytała wejście z bieżącego źródła aż do napotkania wiersza zawierającego tylko słowo (bez żadnych kończących odstępów). Wszystkie wiersze przeczytane do tego momentu są następnie używane jako standardowe wejście polecenia.

Format dokumentów włączonych jest następujący:

<<[-]słowo
        dokument włączony
ogranicznik

Na słowie nie jest wykonywana interpretacja parametrów, podstawiania wyników poleceń, rozwijanie nazw plików ani interpretacja wyrażeń arytmetycznych. Jeżeli jakieś znaki w słowie są cytowane, to ogranicznik jest wynikiem usunięcia cytowań ze słowa, a wiersze w dokumencie włączonym nie są interpretowane. Jeżeli słowo nie jest cytowane, wszystkie wiersze dokumentu włączonego podlegają interpretacji parametrów, podstawianiu poleceń i interpretacji wyrażeń arytmetycznych. W tym ostatnim przypadku, sekwencja \<nowalinia> jest ignorowana, a do cytowania znaków \, $ i ` musi być użyte \.

Jeżeli operatorem przekierowania jest <<-, to wszystkie początkowe znaki tabulacji są obcinane z wierszy wejściowych i wiersza zawierającego ogranicznik. Pozwala to na ustawienie naturalnych wcięć dla dokumentów włączonych w skryptach powłoki.  

Powielanie deskryptorów plików

Operator przekierowania

[n]<&słowo

służy do powielania deskryptorów plików wejściowych. Jeżeli słowo zinterpretowane zostanie jako jedna lub więcej cyfr, to deskryptor pliku oznaczony przez n czyniony jest kopią tego deskryptora. Jeżeli cyfry w słowie nie określają otwartego dla wejścia deskryptora, pojawia się błąd przekierowania. Jeżeli słowo zinterpretowane jest jako -, deskryptor pliku n jest zamykany. Jeżeli n nie zostało określone, to stosowane jest standardowe wejście (deskryptor pliku 0).

Operator

[n]>&słowo

podobnie, służy do powielania deskryptorów standardowego wyjścia. Jeżeli nie określono n, stosowane jest standardowe wyjście (deskryptor pliku 1). Jeżeli cyfry w słowie nie określają deskryptora pliku otwartego do wyjścia, pojawia się błąd przekierowania. W przypadku specjalnym, jeżeli pominięto n, a słowo nie jest interpretowane jako jedna lub więcej cyfr, to przekierowywane są standardowe wyjście i standardowe wyjście błędów, jak opisano poprzednio.  

Otwieranie deskryptorów plików do odczytu i zapisu

Operator przekierowania

[n]<>słowo

powoduje, że plik o nazwie wynikłej z interpretacji słowa zostanie otwarty do odczytu i zapisu. Odczyt i zapis będą wykonywane z deskryptora pliku n lub standardowego wejścia (deskryptor pliku 0) jeśli nie podano n. Jeżeli plik nie istnieje jest tworzony.  

ALIASY

Aliasy (czyli synonimy) pozwalają na zastąpienie słowa łańcuchem, gdy zostanie ono użyte jako pierwsze słowo w poleceniu prostym. Powłoka utrzymuje listę aliasów, które mogą być ustawiane i unieważniane przy pomocy wbudowanych poleceń alias i unalias (zobacz poniżej WBUDOWANEPOLECENIAPOWŁOKI). Dla pierwszego słowa każdego polecenia, jeśli nie jest cytowane, następuje sprawdzenie, czy posiada ono alias. Jeżeli tak, to słowo to jest zastępowane tekstem aliasu. Nazwa aliasu i zastępujący ja tekst mogą zawierać dowolne poprawne wejście powłoki, łącznie z metaznakami podanymi powyżej, z wyjątkiem tego, że nazwy aliasów nie mogą zawierać znaku równości =. Pierwsze słowo tekstu zastępującego jest z kolei sprawdzane na aliasy, ale słowo identyczne z interpretowanym właśnie aliasem nie jest interpretowane powtórnie. Oznacza to, że można mieć alias ls do ls -F, na przykład, a bash nie będzie usiłował rekurencyjnie interpretować zastępującego tekstu. jeżeli ostatnim znakiem wartości aliasu jest odstęp, to następne słowo polecenia występujące po aliasie ma również sprawdzaną interpretację aliasów.

Aliasy są tworzone i pokazywane poleceniem alias, a usuwane poleceniem unalias.

Nie ma żadnego mechanizmu posługiwania się argumentami w tekście zastępującym. Jeśli potrzebne są argumenty, powinna zostać użyta funkcja powłoki (zobacz poniżej FUNKCJE).

Aliasy nie są interpretowane, gdy powłoka nie jest interaktywna, chyba że ustawiono opcję powłoki expand_aliases przy pomocy shopt (zobacz opis shopt w sekcji WBUDOWANE POLECENIA POWŁOKI poniżej).

Reguły dotyczące definiowania i używania aliasów są nieco zagmatwane. Bash zawsze czyta co najmniej jeden pełny wiersz z wejścia przed wykonaniem jakichkolwiek poleceń tego wiersza. Aliasy interpretowane są w czasie odczytu polecenia, nie podczas jego wykonywania. Z tego powodu, definicja aliasu występująca w tym samym wierszu, co inne polecenie nie zadziała aż do przeczytania następnego wiersza wejścia. Na polecenia występujące po definicji aliasu, w tym samym wierszu, nowy alias nie ma wpływu. Zachowanie to ujawnia się także podczas wykonywania funkcji. Aliasy interpretowane są w czasie odczytu definicji funkcji, nie zaś podczas jej wykonywania, gdyż sama definicja funkcji stanowi polecenie złożone. W skutek tego aliasy zdefiniowane w funkcji nie są dostępne, aż do chwili po wykonaniu funkcji. Dla bezpieczeństwa, zawsze umieszczaj definicje aliasów w odrębnym wierszu i nie używaj alias w poleceniach złożonych.

Prawie w każdym zastosowaniu aliasy są wyparte przez funkcje powłoki.  

FUNKCJE

Punkcja powłoki, zdefiniowana jak opisano powyżej, w sekcji GRAMATYKAPOWŁOKI, przechowuje szereg poleceń do późniejszego wykonania. Gdy nazwa funkcji powłoki używana jest jako nazwa polecenia prostego, wykonywana jest lista poleceń związanych z tą nazwą funkcji. Funkcje wykonywane są w kontekście bieżącej powłoki; do ich interpretacji nie jest tworzony żaden nowy proces (zauważ różnicę w stosunku do wykonania skryptu powłoki). Podczas wykonywania funkcji, przekazane jej argumenty stają się parametrami pozycyjnymi. Aktualizowany jest specjalny parametr #, tak by odzwierciedlał zmianę. Parametr pozycyjny 0 nie jest zmieniany. Zmienna FUNCNAME podczas wykonywania funkcji ustawiana jest na jej nazwę. Wszystkie inne aspekty środowiska wykonywania powłoki są identyczne między funkcją i jej wywołującym, z wyjątkiem tego, że nie jest dziedziczona pułapka (trap) DEBUG (zobacz opis wbudowanego trap poniżej, w sekcji WBUDOWANE POLECENIA POWŁOKI ).

Zmienne lokalne dla funkcji mogą być deklarowane przy pomocy wbudowanego polecenia local. Zwykle zmienne i ich wartości są wspólne dla funkcji i jej wołającego.

Jeżeli w funkcji wywoływane jest wbudowane polecenie return, funkcja kończy działanie i wykonywanie wznawiane jest od następnego polecenia po wywołaniu funkcji. Gdy funkcja kończy działanie, parametrom pozycyjnym i parametrowi specjalnemu # przywracane są wartości, jakie posiadały one przed wykonaniem funkcji.

Listę nazw i definicji funkcji można uzyskać przy pomocy opcji -f wbudowanych poleceń declare lub typeset. Opcja -F poleceń declare lub typeset podaje same nazwy funkcji. Funkcje można eksportować, tak że będą one automatycznie zdefiniowane w podpowłokach. Wykonuje się to przy pomocy opcji -f wbudowanego polecenia export.

Funkcje mogą być rekurencyjne. Nie ma narzuconego ograniczenia na liczbę rekurencyjnych wywołań.  

OBLICZANIE WYRAŻEŃ ARYTMETYCZNYCH

Powłoka pozwala, pod pewnymi warunkami, na obliczanie wartości wyrażeń arytmetycznych (zobacz wbudowane polecenie let i Interpretacja wyrażeń arytmetycznych). Obliczenia wykonywane są na długich liczbach całkowitych (long integer), bez kontroli przepełnienia (overflow), mimo iż dzielenie przez 0 jest przechwytywane i oznaczane jako błąd. Operatory i ich priorytety oraz sposób ich dołączania są takie same jak w języku C. Poniższa lista operatorów pogrupowana jest w poziomy operatorów o jednakowym priorytecie. Poziomy podano w kolejności malejącego priorytetu.

id++ id--
post-inkrementacja i post-dekrementacja zmiennej
++id --id
pre-inkrementacja i pre-dekrementacja zmiennej
- +
jednoargumentowy minus i plus
! ~
negacja logiczna i bitowa
**
potęgowanie
* / %
mnożenie, dzielenie, reszta z dzielenia
+ -
dodawanie, odejmowanie
<< >>
lewo i prawostronne przesunięcie bitowe
<= >= < >
porównanie
== !=
równości i nierówność
&
bitowa koniunkcja (AND)
^
bitowa alternatywa wyłączna (XOR)
|
bitowa alternatywa (OR)
&&
logiczna koniunkcja (AND)
||
logiczna alternatywa (OR)
wyraż?wyraż:wyraż
obliczenie warunkowe (conditional evaluation)
= *= /= %= += -= <<= >>= &= ^= |=
przypisanie
wyraż1 , wyraż2
przecinek

Jako operandy dozwolone są zmienne powłoki; interpretacja parametrów przeprowadzana jest przed obliczeniem wyrażenia. Wewnątrz wyrażenia, do zmiennych powłoki można się też odwoływać przez nazwę, bez użycia składni interpretacji parametrów. Gdy wystąpi odwołanie się do zmiennej, jej wartość obliczana jest jako wyrażenie arytmetyczne. Zmienna powłoki nie musi mieć włączonego atrybutu liczby całkowitej by mogła być użyta w wyrażeniu.

Stałe z początkowym 0 interpretowane są jako liczby ósemkowe. Początkowe 0x lub 0X oznacza liczbę szesnastkową. W pozostałych przypadkach liczby mają postać [podstawa#]n, gdzie podstawajest liczbą dziesiętną pomiędzy 2 a 64 reprezentującą podstawę układu pozycyjnego, zaś n liczbą w układzie o tej podstawie. Jeśli pominięto podstawa#, to używana jest podstawa 10. Cyfry większe niż 9 reprezentowane są przez małe litery, wielkie litery, @ i _, w tej kolejności. Jeżeli podstawa jest mniejsza bądź równa 36, to do zapisu liczb pomiędzy 10 a 35 można używać zamiennie małych i wielkich liter.

Operatory interpretowane są w kolejności priorytetu. Podwyrażenia w nawiasach obliczane są jako pierwsze i mogą unieważnić podane wyżej reguły priorytetów.  

WYRAŻENIA WARUNKOWE

Wyrażenia warunkowe używane są przez polecenie złożone [[ oraz polecenia wbudowane test i [ do testowania atrybutów pliku i wykonywania porównań łańcuchowych i arytmetycznych. Wyrażenia złożone są z poniższych jedno- i dwuargumentowych składowych. Jeśli któryś z argumentów plikowych jednej z składowych jest w postaci /dev/fd/n, to sprawdzany jest deskryptor pliku n. Jeżeli argument plik którejś składowej jest jednym z /dev/stdin, /dev/stdout lub /dev/stderr, to sprawdzany jest, odpowiednio, deskryptor 0, 1 lub 2.

-a plik
Prawda jeśli plik istnieje.
-b plik
Prawda jeśli plik istnieje i jest blokowym plikiem specjalnym.
-c plik
Prawda jeśli plik istnieje i jest znakowym plikiem specjalnym.
-d plik
Prawda jeśli plik istnieje jest katalogiem.
-e plik
Prawda jeśli plik istnieje.
-f plik
Prawda jeśli plik istnieje i jest plikiem zwykłym.
-g plik
Prawda jeśli plik istnieje i ma ustawiony bit set-group-id.
-h plik
Prawda jeśli plik istnieje i jest dowiązaniem symbolicznym.
-k plik
Prawda jeśli plik istnieje i ma ustawiony bit ochrony (sticky bit).
-p plik
Prawda jeśli plik istnieje i jest potokiem nazwanym (FIFO).
-r plik
Prawda jeśli plik istnieje i daje się czytać.
-s plik
Prawda jeśli plik istnieje i ma rozmiar większy niż zero.
-t fd
Prawda jeśli deskryptor pliku fd jest otwarty i odnosi się do terminala.
-u plik
Prawda jeśli plik istnieje i ma ustawiony bit set-user-id.
-w plik
Prawda jeśli plik istnieje i daje się doń zapisać.
-x plik
Prawda jeśli plik istnieje i jest wykonywalny.
-O plik
Prawda jeśli plik istnieje i jego właścicielem jest efektywny id użytkownika.
-G plik
Prawda jeśli plik istnieje i jego właścicielem jest efektywny id grupy.
-L plik
Prawda jeśli plik istnieje i jest dowiązaniem symbolicznym.
-S plik
Prawda jeśli plik istnieje i jest gniazdem.
-N plik
Prawda jeśli plik istnieje i być zmieniany od czasu ostatniego jego odczytu.
plik1 -nt plik2
Prawda jeśli plik1 jest nowszy (według daty modyfikacji) od pliku2.
plik1 -ot plik2
Prawda jeśli plik1 jest starszy niż plik2.
plik1 -ef plik2
Prawda jeśli plik1 i plik2 mają ten sam numer urządzenia i i-węzła.
-o nazwa_opcji
Prawda jeśli opcja powłoki nazwa_opcji jest włączona. Zobacz zestawienie opcji w opisie opcji -o wbudowanego set, poniżej.
-z łańcuch
Prawda jeśli długość łańcucha wynosi zero.
-n łańcuch
łańcuch
Prawda jeśli łańcuch ma długość niezerową.
łańcuch1 == łańcuch2
Prawda jeśli łańcuchy są równe. Zamiast == można użyć =.
łańcuch1 != łańcuch2
Prawda jeśli łańcuchy nie są równe.
łańcuch1 < łańcuch2
Prawda jeśli łańcuch1 przy sortowaniu występowałby przed łańcuchem2 według bieżącego ustawienia locale.
łańcuch1 > łańcuch2
Prawda jeśli łańcuch1 przy sortowaniu występowałby po łańcuchu2 według bieżącego ustawienia locale.
arg1 OP arg2
OP jest jednym z -eq, -ne, -lt, -le, -gt lub -ge. Te arytmetyczne operatory dwuargumentowe zwracają prawdę jeśli arg1 jest odpowiednio równe (eq), nie równe (ne), mniejsze niż (lt), mniejsze bądź równe (le), większe niż (gt) lub większe bądź równe (ge) arg2. Arg1 i arg2 mogą być dodatnimi lub ujemnymi liczbami całkowitymi.
 

INTERPRETACJA POLECEŃ PROSTYCH

Gdy wykonywane jest polecenie proste, powłoka wykonuje następujące interpretacje, przypisania i przekierowania, od lewej do prawej.
1.
Słowa oznaczone przez analizator składni jako przypisania zmiennych (poprzedzające nazwę polecenia) i przekierowania zachowywane są do późniejszego przetworzenia.
2.
Słowa, nie będące przypisaniami zmiennych ani przekierowaniami są interpretowane. Jeżeli po interpretacji pozostaną jakieś słowa, to pierwsze z nich przyjmowane jest za nazwę polecenia a pozostałe za argumenty.
3.
Wykonywane są przekierowania, jak opisano powyżej w sekcji PRZEKIEROWANIE.
4.
W każdym przypisaniu zmiennej tekst po znaku równości = podlega interpretacji tyldy, interpretacji parametrów, podstawianiu wyników poleceń, interpretacji wyrażeń arytmetycznych i usuwaniu cudzysłowów, zanim zostanie przypisany do zmiennej.

Jeżeli nie otrzymano żadnej nazwy polecenia, to przypisania zmienncyh dotyczą środowiska aktualnej powłoki. W przeciwnim razie, zmienne są dodawane do środowiska wykonywanego polecenia i nie mają wpływu na środowisko bieżącej powłoki. jeżeli któreś z przypisań usiłuje nadać wartość zmiennej read-only, pojawia się błąd, a polecenie kończy pracę z niezerowym kodem.

Jeżeli nie otrzymano żadnej nazwy polecenia, wykonywane są przekierowania, ale nie mają one wpływu na bieżące środowisko powłoki. Błąd przekierowania powoduje, że polecenie kończy pracę z niezerowym kodem.

Jeżeli po interpretacji istnieje nazwa polecenia, to wykonywanie odbywa się jak opisano poniżej. W przeciwnym wypadku, polecenie kończy pracę. Jeżeli jednym z wykonanych kroków było podstawienie wyników polecenia, to zwracany kod zakończenia jest kodem ostatniego wykonanego podstawienia polecenia. Jeśli nie wystąpiło podstawianie poleceń, to polecenie kończy pracę z kodem zerowym.  

WYKONYWANIE POLECEŃ

Po podziale polecenia na słowa, jeśli jego wynikiem jest polecenie proste z opcjonalną listą argumentów, podejmowane są poniższe akcje.

Jeśli polecenie nie zawiera ukośników, powłoka usiłuje je zlokalizować. jeżeli istnieje funkcja powłoki o tej nazwie, wywoływana jest ta funkcja, jak opisano powyżej w sekcji FUNKCJE. Jeżeli nazwa nie pasuje do funkcji, powłoka szuka jej na liście poleceń wbudowanych. Jeżeli nie znaleziono pasujące, to jest ono wywoływane.

Jeżeli nazwa nie jest ani funkcją powłoki ani poleceniem wbudowanym i nie zawiera ukośników, to bash przeszukuje każdy element z PATH usiłując znaleźć katalog zawierający plik wykonywalny o takiej nazwie. Bash posługuje się tablicą mieszającą (hash table) do zapamiętywania pełnych nazw plików wykonywalnych (zobacz hash w WBUDOWANE POLECENIA POWŁOKI poniżej). Pełne przeszukiwanie katalogów z PATH wykonywane jest tylko wtedy, gdy polecenia nie znaleziono w tablicy mieszającej. Jeżeli poszukiwanie nie powiodło się, powłoka wypisuje komunikat o błędzie i zwraca kod zakończenia równy 127.

Jeżeli poszukiwanie było pomyślne lub jeśli nazwa polecenia zawiera jeden lub więcej ukośników, powłoka wykonuje zadany program w odrębnym środowisku wykonania. Argumentowi 0 przypisywana jest podana nazwa, a pozostałym argumentom polecenia podane argumenty, jeśli były takowe.

Jeżeli wykonanie to nie powiedzie się, gdyż plik nie ma formatu wykonywalnego, a nie jest katalogiem, to zakłada się, że jest on skryptem powłoki, plikiem zawierającym polecenia powłoki. Powoływana jest podpowłoka do jego wykonania. Powłoka ta reinicjuje się, zatem efekt jest taki, jakby do obsługi skryptu została wywołana nowa powłoka, z wyjątkiem tego, że położenia poleceń zapamiętane przez rodzica (zobacz hash poniżej w WBUDOWANE POLECENIA POWŁOKI są zachowywane przez potomka.

Jeżeli program jest plikiem o zawartości rozpoczynającej się od #!, to reszta pierwszego wiersza określa interpreter dla tego programu. Powłoka uruchamia podany interpreter na systemach operacyjnych, które same nie obsługują tego formatu wykonywalnego. Argumenty dla interpretera składają się z pojedynczego opcjonalnego argumentu występującego po nazwie interpretera w pierwszym wierszu programu, następującej po nim nazwy programu i następujących po niej argumentów polecenia, jeśli były takowe.  

ŚRODOWISKO WYKONYWANIA POLECEŃ

Powłoka posiada środowisko wykonywania (execution environment), składające się z:

*
otwarte pliki odziedziczone przez powłokę przy wywołaniu, zmodyfikowane przez przekierowania przekazane do wbudowanego polecenia exec
*
bieżący katalog roboczy ustawiony przez cd, pushd lub popd, albo odziedziczony przez powłokę przy wywołaniu
*
maskę trybut tworzonych plików ustawioną przez umask albo odziedziczoną po rodzicu powłoki
*
bieżące pułapki ustawione przez trap
*
parametry powłoki ustawione przez przypisania zmiennych przy pomocy set albo odziedziczone ze środowiska rodzica powłoki
*
funkcje powłoki zdefiniowane podczas wykonywania lub odziedziczone ze środowiska rodzica powłoki
*
opcje włączone przy wywołaniu (albo domyślnie albo przy pomocy argumentów wiersza poleceń) albo przez set
*
opcje włączone przez shopt
*
aliasy powłoki zdefiniowane przy pomocy alias
*
różne id procesów, łącznie z identyfikatorami zadań tła, wartość $$ i wartość $PPID

Gdy ma zostać wykonane polecenie proste inne niż funkcja powłoki lub polecenie wbudowane, wywoływane jest w odrębnym środowisku wykonania, skłądających się z poniższych elementów. Jeśli nie podano inaczej, wartości dziedziczone są z powłoki.

*
otwarte pliki powłoki, plus modyfikacje i dodatki określone przez przekierowania polecenia
*
bieżący katalog roboczy
*
maska trybu tworzonych plików
*
zmienne powłoki oznaczone do wyeksportowania, razem ze zmiennymi wyeksportowanymi do polecenia, przekazane w środowisku.
*
pułapki przechwycone przez powłokę resetowane są do wartości odziedziczonych przez nią od rodzica, a pułapki ignorowane przez powłokę są ignorowane.

Polecenie wywołane w odrębnym środowisku nie może wpływać na środowisko wykonywania powłoki.

Podstawienia wyników poleceń i polecenia asynchroniczne wywoływane są w środowisku podpowłoki, które jest kopią środowiska powłoki, z wyjątkiem tego, że pułapki przechwycone przez powłokę są resetowane do wartości, jakie powłoka odziedziczyła po rodzicu podczas wywołania. Polecenia wbudowane wywoływane jako część potoku również wykonywane są w środowisku podpowłoki. Zmiany wykonane w środowisku podpowłoki nie mogą wpływać na środowisko wykonywania powłoki.

Jeżeli po poleceniu występuje &, a nie uaktywniono sterowania zadaniami, to domyślnym standardowym wejściem dla tego polecenia jest pusty plik /dev/null. W przeciwnym razie wywoływane polecenie dziedziczy deskryptory plików po wołającej powłoce, zmodyfikowane przekierowaniami.  

ŚRODOWISKO

Poczas wywoływania program otrzymuje tablicę łańcuchów zwaną środowiskiem(environment). jest to lista par nazwa-wartość, o postaci nazwa=wartość.

Powłoka pozwala na manipulowanie środowiskiem na kilka sposobów. Przy wywołaniu, przeszukuje ona własne środowisko i tworzy parametr dla każdej znalezionej nazwy, automatycznie zaznaczając go do wyeksportowania do procesów potomnych. Wykonywane polecenia dziedziczą środowisko. Polecenia export i declare -x pozwalają na dodawanie i usuwanie ze środowiska parametrów i funkcji. Jeżeli w środowisku zmieniana jest wartość parametru, to nowa wartość staje się częścią środowiska, zastępując starą. Środowisko dziedziczone przez każde wykonywane polecenie składa się z początkowego środowiska powłoki, którego wartości mogą być w powłoce zmieniane, minus ewentualne pary usunięte poleceniem unset, plus dodane poprzez polecenia export i declare -x.

Środowisko dla dowolnego polecenia prostego czy funkcji może być tymczasowo powiększone przez poprzedzenie polecenia przypisaniem parametrów, jak opisano powyżej w sekcji PARAMETRY. Te instrukcje przypisania mają wpływ wyłącznie na środowisko postrzegane przez to polecenie.

Jeżeli ustawiona jest opcja -k (zobacz poniżej opis wbudowanego polecenia set), to wszystkie przypisania parametrów umieszczane są w środowisku polecenia, a nie tylko te, które poprzedzają nazwę polecenia.

Gdy bash wywołuje polecenie zewnętrzne, zmienna _ ustawiana jest na pełną nazwę pliku polecenia i przekazywana temu poleceniu w jego środowisku.  

KOD ZAKOŃCZENIA

Dla celów powłoki, polecenie, które zakończyło pracę z zerowym kodem zakończenia, powiodło się. Zerowy kod oznacza powodzenie. Niezerowy kod oznacza niepowodzenie. Gdy polecenie kończy pracę z błędem krytycznym N, bash posługuje się wartością 128+N jako kodem zakończenia.

Jeżeli nie znaleziono polecenia, proces potomny powołany do jego wykonania zwraca kod 127. Jeżeli polecenie zostało znalezione, ale nie jest wykonywalne, kod zakończenia wynosi 126.

Jeżeli polecenie nie powiodło się z powodu błędu podczas interpretacji lub przekierowania, kod zakończenia jest większy od zera.

Wbudowane polecenia powłoki zwracają kod 0 (true prawda) jeśli się powiodły, i niezerowy (false fałsz) jeśli podczas ich wykonywania pojawił się błąd. Wszystkie polecenia wbudowane zwracają kod 2 dla wskazania niepoprawnego użycia.

Sam Bash zwraca kod zakończenia ostatniego wykonanego polecenia, chyba że pojawi się błąd składni, wówczas kończy pracą z wartością niezerową. Zobacz też poniżej polecenie wbudowane exit.  

SYGNAŁY

Gdy bash jest interaktywny, przy braku jakichkolwiek pułapek (przechwytywania sygnałów), ignoruje on SIGTERM (tak, że kill 0 nie zabija powłoki interaktywnej), a SIGINT jest przechwytywany i obsługiwany (tak, że wbudowane polecenie wait daje się przerwać). We wszystkich przypadkach, bash ignoruje SIGQUIT. Jeżeli działa kontrola zadań, bash ignoruje SIGTTIN, SIGTTOU i SIGTSTP.

Zadania synchroniczne uruchomione przez bash mają procedury obsługi sygnałów (signal handlers) ustawione na wartości odziedziczone przez powłokę po rodzicu. Jeżeli nie pracuje kontrola zadań, to polecenia asynchroniczne ignorują również SIGINT i SIGQUIT. Polecenia uruchamiane wskutek podstawiania poleceń ignorują generowane z klawiatury sygnały kontroli zadań SIGTTIN, SIGTTOU i SIGTSTP.

Powłoka domyślnie kończy pracę po otrzymaniu SIGHUP. Przed zakończeniem, powłoka interaktywna rozsyła otrzymany SIGHUP do wszystkich zadań, pracujących lub zatrzymanych. Do zatrzymanych zadań wysyłany jest SIGCONT by upewnić się, że otrzymują SIGHUP. Chcąc uniknąć wysłania sygnału przez powłokę do konkretnego zadania, należy usunąć je z tablicy zadań przy pomocy wbudowanego polecenia disown (zobacz poniżej WBUDOWANEPOLECENIAPOWŁOKI) lub oznakować, by nie otrzymywało SIGHUP, posługując się disown -h.

Jeżeli przy pomocy shopt została ustawiona opcja huponexit powłoki, bash wysyła SIGHUP do wszystkich zadań, gdy kończy pracę interaktywna powłoka zgłoszeniowa.

Gdy bash podczas oczekiwania na ukończenie polecenia otrzymuje sygnał, dla którego ustawiono pułapkę, pułapka ta nie zostanie wykonana aż do zakończenia pracy polecenia. Gdy bash oczekuje na polecenie asynchroniczne za pośrednictwem wbudowanego wait, odbiór sygnału, dla którego ustawiono przechwytywanie spowoduje, że wbudowane wait natychmiast skończy pracę z kodem większym od 128, po czym natychmiast zostanie wywołana pułapka.  

KONTROLA ZADAŃ

Kontrola zadań odnosi się do możliwości selektywnego zatrzymywania (zawieszania - suspend) wykonywania procesów i późniejszej kontynuacji (wznawiania - resume) ich wykonywania. Użytkownik zwykle wykorzystuje to udogodnienie za pośrednictwem interaktywnego interfejsu obsługiwanego wspólnie przez systemowy sterownik terminala i bash.

Powłoka kojarzy z każdym potokiem zadanie. Przechowuje tablicę aktualnie wykonywanych zadań, którą można przeglądać za pomocą polecenia jobs. Gdy bash uruchamia zadanie asynchronicznie (w tle), wypisuje wiersz w rodzaju:

[1] 25647

wskazujący, że zadanie to ma numer 1 a ID ostatniego procesu w potoku związanym z zadaniem wynosi 25647. Wszystkie procesy w jednym potoku należą do tego samego zadania. Bash posługuje się abstrakcją (abstraction) zadania jako podstawą kontroli zadań.

Dla ułatwienia implementacji interfejsu użytkownika do kontroli zadań, system operacyjny utrzymuje pojęcie ID grupy procesów bieżącego terminala (current terminal process group ID). Elementy tej grupy procesów (procesy, których ID grupy procesów jest równy ID grupy procesów bieżącego terminala) otrzymują generowane z klawiatury sygnały, takie jak SIGINT. Mówimy, że procesy te pracują pierwszoplanowo. Procesy tła to takie, których ID grupy procesów różni się od terminala; procesy takie są odporne na sygnały pochodzące z klawiatury. Tylko procesom pierwszoplanowym wolno czytać z lub pisać na terminalu. Do procesów tła usiłujących czytać (pisać) z terminala wysyłany jest przez sterownik terminala sygnał SIGTTIN(SIGTTOU), który, jeśli nie zostanie przechwycony, wstrzymuje proces.

Jeżeli system operacyjny, na którym działa bash obsługuje kontrolę zadań, bash zawiera funkcje do jej wykorzystywania. Naciśnięcie klawisza wstrzymania (zwykle ^Z, Control-Z) podczas pracy procesu powoduje, że proces ten zostanie zatrzymany a sterowanie zostanie zwrócone do bash. Naciśnięcie klawisza opóźnione wstrzymanie (zwykle ^Y, Control-Y) powoduje, że proces zostanie zatrzymywany gdy będzie usiłował czytać wejście z terminala, a sterowanie powróci do bash. Użytkownik może następnie zmieniać stan takiego zadania, posługując się poleceniem bg do kontynuacji zadania w tle, fg do kontynuacji na pierwszym planie lub poleceniem kill do zabicia zadania. ^Z działa natychmiast i ma efekt uboczny: powoduje odrzucenie oczekującego wyjścia i wprowadzonych, a nieprzetworzonych naciśnięć klawiszy (typeahead).

Istnieje kilka sposobów wskazywania zadania w powłoce. Znak % poprzedza nazwę zadania. Zadanie numer n można wskazać jako %n. Zadanie może być też określone przez użycie przedrostka nazwy użytej do jego uruchomienia lub podłańcucha, jaki występuje w jego wierszu poleceń. Na przykład, %ce odnosi się do zatrzymanego zadania ce. Jeśli przedrostek pasuje do więcej niż jednego zadania, bash zgłasza błąd. Z drugiej strony, użycie %?ce, wskazuje na zadanie zawierające podłańcuch ce w swym wierszu poleceń. Jeżeli łańcuch pasuje do więcej niż jednego zadania, bash zgłasza błąd. Symbole %% i %+ określają rozumiane przez powłokę bieżące zadanie, będące ostatnim zadaniem zatrzymanym, gdy było na pierwszym planie lub uruchomionym w tle. Do poprzedniego zadania można odwoływać się przy pomocy %-. W wyjściu odnoszącym się do zadań (np. wyjście polecenia jobs), bieżące zadanie jest zawsze zaznaczone znakiem +, a zadanie poprzednie -.

Do przywrócenia zadania na pierwszy plan można posłużyć się po prostu jego nazwą: %1 jest synonimem dla ,,fg %1'', przywracającego zadanie 1 z tła na pierwszy plan. Podobnie, ,,%1 &'' wznawia zadanie 1 w tle, równoważnie do ,,bg %1''''.

Powłoka natychmiast dowiaduje się czy zadanie zmieniło stan. Normalnie, bash czeka ze zgłoszeniem zmian do momentu, gdy ma wyświetlić zachętę, by nie przerywać innego wyjścia. Jeżeli włączono opcję -b wbudowanego polecenia set, bash zgłasza takie zmiany natychmiast. Dla każdego kończącego pracę procesu potomnego wykonywana jest ewentualna pułapka przechwytująca SIGCHLD.

Jeżeli wykonano próbę zakończenia pracy bash przy istniejących zatrzymanych zadaniach, powłoka wypisuje komunikat ostrzegawczy. Można wówczas posłużyć się poleceniem jobs do sprawdzenia ich stanu. Jeżeli wykonywana jest druga próba zakończenia pracy bez wystąpienia wtrąconego między nie polecenia, powłoka nie wypisuje kolejnego ostrzeżenia a zatrzymane zadania są przerywane.  

ZACHĘTA POWŁOKI

Przy wykonywaniu interaktywnym bash wyświetla główny symbol zachęty (primary prompt) PS1 kiedy jest gotowa na odczyt polecenia, zaś wtórną (secondary) zachętę PS2 kiedy potrzebuje więcej danych z wejścia do uzupełnienia polecenia. Bash pozwala na dostosowywanie tych łańcuchów zachęty poprzez wstawianie pewnej ilości znaków specjalnych rozpoczynających się odwrotnym ukośnikiem, które są dekodowane jak następuje:
\a
znak dzwonka ASCII (07)
\d
data w formacie "DzieńTyg Miesiąc Dzień" format (np., "Tue May 26")
\e
znak escape ASCII (033)
\h
nazwa hosta do pierwszej kropki `.'
\H
nazwa hosta
\j
liczba zadań aktualnie obsługiwanych przez powłokę
\l
główna część nazwy urządzenia terminala powłoki

znak nowej linii
\r
powrót karetki
\s
nazwa powłoki, główna część nazwy $0 (fragment występujący po ostatnim ukośniku)
\t
bieżący czas w formacie 24-godzinnym GG:MM:SS
\T
bieżący czas w formacie 12-godzinnym GG:MM:SS
\@
bieżący czas w 12-godzinnym formacie am/pm
\A
bieżący czas w 24-godzinnym formacie GG:MM
\u
nazwa bieżącego użytkownika (username)
\v
wersja programu bash (np. 2.00)
\V
wydanie bash, wersja+poziom łat (np., 2.00.0)
\w
bieżący katalog roboczy
\W
główna część nazwy bieżącego katalogu roboczego
\!
numer tego polecenia w historii
\#
numer polecenia tego polecenia
\$
Jeżeli efektywnym UID jest 0, to #, w przeciwnym razie $
\nnn
znak odpowiadający szesnastkowej liczbie nnn
\\
odwrotny ukośnik
\[
początek sekwencji znaków niedrukowalnych, która może służyć do osadzenia w zachęcie sekwencji sterujących terminalem
\]
koniec sekwencji znaków niedrukowalnych

Numer polecenia i numer w historii są zwykle różne: numer polecenia w historii jest jego pozycją na liście historii, która może obejmować polecenia odtworzone z pliku historii (zobacz poniżej HISTORIA), podczas gdy numer polecenia jest pozycją w sekwencji poleceń wykonanych w obecnej sesji powłoki. Po zdekodowaniu, łańcuch jest interpretowany poprzez interpretację parametrów, podstawianie wyników poleceń, interpretację wyrażeń arytmetycznych, interpretację łańcuchów i usuwanie cytowań, zgodnie z wartością opcji promptvars powłoki (zobacz opis polecenia shopt w sekcji WBUDOWANE POLECENIA POWŁOKI poniżej).  

READLINE

Jest to biblioteka obsługująca odczytywanie wejścia podczas posługiwania się powłoką interaktywną, chyba że przy wywołaniu powłoki podano opcję --noediting. Domyślnie, polecenia edycji wiersza są podobne do występujących w emacsie. Dostępny jest także interfejs edycji wiersza w stylu vi. By wyłączyć edycję wiersza po uruchomieniu powłoki, użyj opcji +o emacs lub +o vi wbudowanego polecenia set (zobacz WBUDOWANE POLECENIA POWŁOKI poniżej).  

Notacja Readline

W tej sekcji, do zapisu naciśnięć klawiszy używana jest notacja w stylu emacsa. Klawisze kontrolne zapisywane są jako C-klawisz, np., C-n oznacza Control-N. Podobnie, meta klawisze zapisywane są jako M-klawisz, zatem M-x oznacza Meta-X. (Na klawiaturach bez klawisza meta M-x oznacza ESC x, tj. naciśnij klawisz Escape a następnie klawisz x. Czyni to ESC the przedrostkiem meta (meta prefix). Kombinacja M-C-x oznacza ESC-Control-x, lub naciśnij klawisz Escape, nast