Баш - Линукс команда - Unix команда

NAME

баш - GNU Bourne-Again SHell

СИНОПСИС

баш [опции] [датотека]

ОПИС

Баш е sh- компатибилен преведувач на командниот јазик кој ги извршува командите што се читаат од стандардниот влез или од датотека. Баш, исто така, вклучува корисни опции од раковите Korn и C ( ksh и csh ).

Баш е наменет да биде усогласена имплементација на спецификацијата на IEEE POSIX Shell и Tools (IEEE работна група 1003.2).

ОПЦИИ

Во прилог на опциите за единечен карактер документирани во описот на наместената вградена команда, bash ги толкува следниве опции кога се повикува:

-c стринг

Ако опцијата -c е присутна, тогаш командите се читаат од низата . Ако постојат аргументи по низата , тие се доделуваат на позициони параметри, почнувајќи од $ 0 .

-i

Ако опцијата -i е присутна, школка е интерактивна .

-l

Прави баш чин како да бил повикан како школка за најава (видете INVOCATION подолу).

-r

Ако опцијата -r е присутна, школка станува ограничена (види ја ОГРАНИЧУВАНАТА РЕШКА подолу).

Ако опцијата -s е присутна или ако не останат аргументи по обработката на опцијата, командите се читаат од стандардниот влез. Оваа опција овозможува поставување на позициони параметри при повикување на интерактивна школка.

Списокот на сите двоцитурни стрингови претходи на $ е испечатен на стандардниот ouput. Ова се низите кои се предмет на превод на јазик кога тековната локација не е C или POSIX . Ова имплицира -n опција; нема да се извршуваат команди.

[- +] O [ shopt_option ]

shopt_option е една од опциите за школка прифатени од изградениот магазин (видете подолу SHELL BUILTIN COMMANDS ). Ако shopt_option е присутна, -O ја поставува вредноста на таа опција; + О го отстранува. Ако shopt_option не е испорачан, имињата и вредностите на опциите на школка прифатени од shopt се испечатени на стандардниот излез. Ако опцијата за повикување е + О , излезот е прикажан во формат кој може да се користи како влез.

-

A - го сигнализира крајот на опциите и ја оневозможува понатамошната обработка на опциите. Сите аргументи по - се третираат како имиња на датотеки и аргументи. Аргументот на - е еквивалентен на - .

Баш, исто така, интерпретира голем број на мулти-карактер опции. Овие опции мора да се појават на командната линија пред да се препознаат опциите со еден карактер.

- пумпа-по-жици

Еквивалентно на -D , но излезот е во формат на датотека GNU gettext po (пренослив објект).

- отпадоци

Еквивалентно на -D .

- помош

Прикажете порака за употреба на стандардниот излез и успешно излезете.

--init-датотека со датотеки

--rcfile датотека

Изврши команди од датотека наместо стандардната иницијална лична иницијализација ~ / .bashrc ако школка е интерактивна (видете INVOCATION подолу).

--Логирај Се

Еквивалентно на -l .

- посветен

Не користете библиотека за читање на GNU за читање на командните линии кога школка е интерактивна.

--непрофил

Немојте да ја читате ниту датотеката за подигнување на системот / etc / profile или било која од личните иницијациски датотеки ~ / .bash_profile , ~ / .bash_login , или ~ / .profile . Стандардно, bash ги чита овие датотеки кога се повикува како школка за најава (видете INVOCATION подолу).

- NORC

Не ја чита и извршува личната иницијална датотека ~ / .bashrc ако школка е интерактивна. Оваа опција е стандардно вклучена ако школка се повикува како sh .

- место

Променете го однесувањето на bash каде што стандардната операција се разликува од стандардот POSIX 1003.2 за да одговара на стандардот ( режим на подигнување ).

- ограничено

Школка станува ограничена (видете ја ОГРАНИЧНАТА РЕШЕНИЈА подолу).

-rpm-бара

Направете листа на датотеки што се потребни за извршување на школка скрипта. Ова имплицира "-n" и е предмет на истите ограничувања како и проверка на проверка на грешка во време на компајлирање; Бактерии, [] тестови и evals не се парсирани, па некои зависности може да се пропушти. --verbose Еквивалентно на -v .

--верзија

Прикажи информации за верзијата за овој пример на баш на стандардниот излез и успешно да излезете.

Аргументи

Ако аргументите останат по обработката на опцијата, и ниту една опција -c ниту -s не е испорачана, првиот аргумент се претпоставува дека е името на датотеката која содржи командни команди. Ако bash се повика на овој начин, $ 0 е поставен во името на датотеката, а позиционите параметри се поставени на останатите аргументи. Баш чита и извршува команди од оваа датотека, а потоа излегува. Статусот на излезот на Баш е излезниот статус на последната команда извршена во сценариото. Ако ниедна команда не е извршена, статусот за излез е 0. Првин е направен обид да се отвори датотеката во тековниот директориум, и ако не се најде датотека, тогаш школка ги пребарува директориумите во PATH за сценариото.

ИНВОКЦИЈА

Школка за логирање е оној чиј прв карактер на нула на аргументот е - , или оној започнал со опцијата --login .

Интерактивна школка е онаа која се стартува без аргументи без опција и без опцијата -c, чиј стандарден влез и излез се поврзани со терминали (како што е определено со изострија (3)), или пак се започна со опцијата -i . PS1 е поставен и $ - вклучува i ако bash е интерактивен, дозволувајќи им на школка скрипта или датотека за стартување за тестирање на оваа состојба.

Следните пасуси опишуваат како bash ги извршува своите датотеки за стартување. Ако некоја од датотеките постои, но не може да се прочита, bash пријавува грешка. Тилдите се прошируваат со имиња на датотеки како што е опишано подолу под проширувањето на Тилда во делот EXPANSION .

Кога bash се повикува како интерактивна најава или како не-интерактивна школка со опцијата --login , таа прво ги чита и извршува командите од датотеката / etc / profile , ако таа датотека постои. По читањето на таа датотека, изгледа ~ / .bash_profile , ~ / .bash_login и ~ / .profile , по тој редослед, и ги чита и извршува командите од првата која постои и може да се чита. Опцијата --noprofile може да се користи кога школката ќе почне да го инхибира ова однесување.

Кога школка за логирање ќе излезе, баш ги чита и извршува командите од датотеката ~ / .bash_logout , ако постои.

Кога интерактивна школка која не е школка за најава е започната, bash ги чита и извршува командите од ~ / .bashrc , ако таа датотека постои. Ова може да се спречи со користење на опцијата --norc . Опцијата --rcfile ќе ја принуди баш да ги чита и извршува командите од датотеката наместо ~ / .bashrc .

Кога bash се стартува неинтерактивно, за да се изврши скрипта за школка, на пример, ја бара променливата BASH_ENV во околината, ја проширува својата вредност ако се појавува таму и ја користи проширената вредност како име на датотека за читање и извршување . Баш се однесува како да е извршена следнава команда:

ако [-n "$ BASH_ENV"]; тогаш. "$ BASH_ENV"; fi

но вредноста на променливата PATH не се користи за пребарување на името на датотеката.

Ако баш се повика со името sh , тој се обидува да го имитира однесувањето на старт-ап на историските верзии на sh што е можно поблиску, истовремено усогласувајќи се со POSIX стандардот. Кога се повикува како интерактивна школка за пријавување или не-интерактивна школка со опцијата --login , прво се обидува да ги чита и изврши командите од / etc / profile и ~ / .profile , во тој редослед. Опцијата --noprofile може да се користи за да се спречи ова однесување. Кога се повикува како интерактивна школка со името sh , bash ја бара променливата ENV , ја проширува својата вредност ако е дефинирана и ја користи проширената вредност како име на датотека за читање и извршување. Бидејќи школка се повика како sh не се обидува да чита и извршува команди од која било друга стартна датотека, опцијата - rcfile нема никаков ефект. Не-интерактивната школка повикана со името sh не се обидува да чита други стартувачки датотеки. Кога се повикува како sh , bash влегува во режим на pozix откако ќе се прочитаат датотеките за стартување.

Кога bash се стартува во режим на подигнување , како и опцијата командната линија -posix , го следи POSIX стандардот за фајлови за стартување. Во овој режим, интерактивните школки ја прошируваат променливата ENV и командите се читаат и извршуваат од датотеката чие име е проширената вредност. Не се читаат други датотеки за стартување.

Баш се обидува да утврди кога го работи серверот од далечинскиот управувач, обично rshd . Ако баш утврди дека се работи со rshd , тој ги чита и извршува командите од ~ / .bashrc , ако таа датотека постои и е читлива. Тоа нема да го стори ако се повика како sh . Опцијата --norc може да се користи за да се спречи ова однесување, а опцијата - rcfile може да се користи за присилување на друга датотека за читање, но rshd обично не ја повикува школка со тие опции или не дозволува да бидат наведени.

Ако школка се стартува со ефективниот корисник (група) id не е еднаков на вистинскиот корисник (група) id, а опцијата -p не е испорачана, не се читаат датотеки за стартување, функциите на школка не се наследени од животната средина, SHELLOPTS променливата, ако се појавува во околината, се игнорира, а ефективниот кориснички ID е поставен на вистинскиот корисник ID. Ако опцијата -p е испорачана при повикување, однесувањето при стартување е исто, но ефективниот кориснички ID не е ресетиран.

ДЕФИНИЦИИ

Во остатокот од овој документ се користат следните дефиниции.

празно

Простор или таб.

збор

Низа од карактери кои се сметаат за единечна единица од школка. Исто така познат како токен .

име

Зборот кој се состои само од алфанумерички карактери и подвлекува, и почнува со азбучен карактер или подвлечен кадар. Исто така се нарекува идентификатор .

metacharacter

Лик кој, кога не котифициран, ги одделува зборовите. Еден од следниве:

| &; () <> простор табот

контролен оператор

А токен што врши контрола на функција. Тоа е еден од следниве симболи:

|| & &&; ;; () |

РЕЗЕРВИРАНИ ЗБОРОВИ

Задржани зборови се зборови што имаат посебно значење за школка. Следните зборови се препознаваат како резервирани кога не се нотирани и или првиот збор од едноставна команда (видете SHELL GRAMMAR подолу) или третиот збор за случај или за команда:

! случај го направи elif другото esac fi за функција ако во изберете потоа, додека додека {} време [[]]

SHELL GRAMMAR

Едноставни команди

Едноставна команда е секвенца од опционални доделби на променливи проследени со празно- разграничени зборови и пренасочувања, и прекинати од контролен оператор . Првиот збор ја одредува командата што треба да се изврши и се пренесува како аргумент нула. Останатите зборови се пренесуваат како аргументи на повиканата команда.

Враќачката вредност на едноставна команда е нејзиниот излез статус, или 128 + n, ако командата е прекината со сигнал n .

Цевководи

Гасоводот е низа од една или повеќе команди одделени со карактерот | . Форматот за гасоводот е:

[ време [ -p ]] [! ] команда [ | команда2 ...]

Стандардниот излез на командата е поврзан преку цевката со стандардниот влез на командата2 . Оваа врска се извршува пред какви било пренасочувања наведени од командата (видете REDIRECTION подолу).

Ако задржаниот збор ! претходи на цевковод, излезниот статус на тој гасовод е логичен НЕ за статусот на излезот од последната команда. Инаку, статусот на гасоводот е излезниот статус на последната команда. Школката чека сите команди во гасоводот да престанат пред враќање на вредност.

Ако времето задржан збор претходи на нафтоводот, изминатото време, како и времето на корисникот и системот кое се троши со неговото извршување, се пријавуваат кога ќе заврши терминалот. Опцијата -p го менува излезниот формат како оној што е наведен од POSIX. Променливата TIMEFORMAT може да биде поставена на стринг со формат кој одредува како треба да бидат прикажани информациите за тајмингот; видете го описот на TIMEFORMAT под Shell Variables подолу.

Секоја команда во нафтоводот се извршува како посебен процес (т.е. во потселек).

Листи

Листата е низа од еден или повеќе цевководи одделени со еден од операторите ; , & , && , или || , и евентуално прекинат со еден од ; , & , или .

Од овие оператори со листа, && и || имаат еднаква предност, проследено со ; и &, кои имаат еднаква предност.

Низа од еден или повеќе нови линии може да се појави во листа, наместо точка-запирка за да се разграничат командите.

Ако командата е прекината од контролниот оператор & , школка ја извршува командата во позадина во потсеб. Школка не чека да заврши командата, а состојбата на враќање е 0. Команди одделени со a ; се извршуваат секвенцијално; школка чека секоја команда да прекине. Повратен статус е статус на излез од последната команда која е извршена.

Контролните оператори && и || означуваат И листи и ИЛИ списоци, соодветно. И листа на И има форма

command1 && command2

command2 се извршува ако, и само ако, командата1 враќа статус на излез од нула.

ИЛИ листата има форма

command1 || command2

command2 се извршува ако и само ако командата1 враќа статус од не-нула состојба на излез. Повратен статус на списоци AND и OR е излезниот статус на последната команда извршена во листата.

Компонирани команди

Сложената команда е една од следниве:

( листа )

листата се извршува во потсеб. Променливите задачи и вградените команди кои влијаат врз животната средина на школка не остануваат во сила по извршувањето на командата. Повратен статус е статус на излез од листата .

{ листа ; }

листата е едноставно извршена во тековната школка. листата мора да биде прекината со нова линија или точка-запирка. Ова е познато како групна команда . Повратен статус е статус на излез од листата . Забележете дека за разлика од мета-ознаките ( и ) , { и } се задржани зборови и мора да се случат кога задржаниот збор е дозволено да биде препознаен. Бидејќи тие не предизвикуваат пауза од збор, тие мора да бидат одделени од листата со празни места.

(( израз ))

Изразот се оценува според правилата опишани подолу под АРИТМЕТСКА ЕВАЛУАЦИЈА . Ако вредноста на изразот е не нула, состојбата на враќање е 0; инаку состојбата на враќање е 1. Ова е точно еднакво за да се дозволи " изразување ".

[[ израз ]]

Врати статус од 0 или 1 во зависност од проценката на изразот на условниот израз . Изразите се составени од примарните опишани подолу под СОСТОЈБИТЕ ИЗРАЗУВАЊА . Поделбата на зборови и ширењето на патеката не се вршат на зборовите помеѓу [ и ]] ; проширување на тилдите, параметар и променлива експанзија, аритметичка експанзија, замена на команди, замена на процесот и отстранување на цитат.

Кога се користат операторите == и ! = , Стрингот од десната страна на операторот се смета за модел и се совпаѓа со правилата опишани подолу под Усогласување на моделот . Вредноста на враќање е 0 ако низата се совпаѓа или не се совпаѓа со моделот, соодветно, и 1 поинаку. Секој дел од моделот може да биде цитиран за да се натера да се совпаѓа како стринг.

Изразите може да се комбинираат со користење на следните оператори, наведени во опаѓачки редослед:

( израз )

Ја враќа вредноста на изразот . Ова може да се искористи за да се надмине нормалниот приоритет на операторите.

! израз

Точно, ако изразот е лажен.

expression1 && expression2

Точно, ако и изразот1 и изразот2 се вистинити.

expression1 || expression2 Точно ако или expression1 или expression2 е вистина.

На && и || операторите не го евалуираат изразот2 ако вредноста на изразот1 е доволна за да се одреди вратената вредност на целиот условен израз.

за име [ во збор ]; направи листа ; направено

Листата на зборови што следат е проширена, генерирајќи листа на предмети. Името на променливата е поставено на секој елемент од оваа листа за возврат, и листата се извршува секој пат. Ако зборот е исфрлен, командата за извршува листа еднаш за секој поставен параметар кој е поставен (видете PARAMETERS подолу). Повратен статус е статусот за излез од последната команда што ја извршува. Ако проширувањето на елементите што следат во резултатите имаат празна листа, ниедна команда не е извршена, а состојбата на враќање е 0.

за (( expr1 ; expr2 ; expr3 )); направи листа ; направено

Прво, аритметичкиот израз expr1 се оценува според правилата опишани подолу под АРИТМЕТСКА ЕВАЛУАЦИЈА . Аритметичкиот израз expr2 потоа се оценува постојано се додека не се евалуира на нула. Секој пат expr2 евалуира на ненулезна вредност, листата се извршува и аритметичкиот израз expr3 се оценува. Ако некој израз е испуштен, тој се однесува како да евалуира на 1. Враќачката вредност е излезниот статус на последната команда во списокот што се извршува или е неточно ако некој од изразите е неважечки.

изберете име [ во збор ]; направи листа ; направено

Листата на зборови што следат е проширена, генерирајќи листа на предмети. Множеството проширени зборови се отпечати на стандардна грешка, секоја претходи на број. Ако во зборот е испуштено, параметрите за позицијата се испечатени (видете подолу PARAMETERS ). Тогаш се прикажува сигналот PS3 и линијата се чита од стандардниот влез. Ако линијата се состои од број кој одговара на еден од прикажаните зборови, тогаш вредноста на името е поставена на тој збор. Ако линијата е празна, повторно се прикажуваат зборовите и известувањето. Ако EOF е прочитан, командата завршува. Секоја друга вредност за читање предизвикува името да биде наместено на нула. Читањето на линија е зачувано во променливата REPLY . Листата се извршува по секоја селекција се додека не се изврши команда за прекин . Излезниот статус на избирање е излезниот статус на последната команда извршена во листата , или нула ако ниедна команда не е извршена.

случај збор во [[(] pattern [ | pattern ]

Командата на случај најпрво го проширува зборот и се обидува да ја поклопи против секоја шема за возврат, користејќи ги истите правила за појавување како за проширување на патеката (видете подолу Expnet Pathname ). Кога се пронајде совпаѓање, соодветната листа се извршува. По првиот натпревар, не се прават обиди за последователни натпревари. Статусот на излез е нула ако ниеден модел не се совпаѓа. Инаку, тоа е статусот за излез од последната команда извршена во листата .

ако листата ; потоа листа; [ елиф листа ; потоа листа ; ] ... [ друго листа ; ] fi

Ако е извршена листата . Ако статусот за излез е нула, тогаш листата се извршува. Инаку, секоја листа на елиф е извршена за возврат, и ако нејзиниот статус на излез е нула, соодветната потоа листа се извршува и командата заврши. Инаку, листата на други се извршува, ако е присутна. Статусот на излез е излезниот статус на последната команда извршена, или нула, ако ниеден услов не е тестиран.

додека листата ; направи листа ; направено

до листата ; направи листа ; направено

Командата додека додека континуирано ја извршува листата на Do додека последната команда во листата враќа статус на излез од нула. Додека командата е идентична со командата додека додека тестот е негиран; листата на врски се извршува се додека последната команда во листата го враќа статусот што не е нулти. Статусот на излез од време додека се додека не е командата, е излезниот статус на последната команда за изврши листа , или нула ако ништо не е извршено.

[ функција ] име () { листа ; }

Ова дефинира функција наречена име . Телото на функцијата е листата на команди помеѓу {и}. Оваа листа се извршува секогаш кога името е наведено како име на едноставна команда. Излезниот статус на функцијата е излезниот статус на последната команда извршена во телото. (Види ФУНКЦИИ подолу.)

КОМЕНТАРИ

Во не-интерактивна школка или интерактивна школка во која е овозможена опцијата interactive_comments до вградената продавница (видете подолу SHELL BUILTIN COMMANDS ), зборот што започнува со # предизвикува игнорирањето на зборот и сите останати знаци на таа линија. Интерактивна школка без вклучена опција interactive_comments не дозволува коментари. Опцијата interactive_comments е стандардно вклучена во интерактивни школки.

Цитирање

Цитирањето се користи за отстранување на посебното значење на одредени карактери или зборови на школка. Цитирањето може да се користи за да се оневозможи специјалниот третман за специјални знаци, за да се спречат заштитените зборови да бидат препознаени како такви, и да се спречи проширување на параметарот.

Секој од мета ознаките наведени погоре под DEFINITIONS има посебно значење за школката и мора да биде цитиран ако се претставува себеси.

Кога ќе се користат командите за проширување на историјата, карактерот за проширување на историјата , обично ! , мора да се цитира за да се спречи проширување на историјата.

Постојат три механизми за цитирање: бегство , еден цитат и двојни цитати.

Не-цитирана обратна коса црта ( \ ) е бегство карактер . Ја зачувува буквалната вредност на следниот карактер што следи, со исклучок на . Ако се појави пар \ и обратна коса црта не е самата цитирана, \ се третира како продолжување на линијата (односно се отстранува од влезниот тек и ефективно се игнорира).

Затворените ликови во единечни цитати ја зачувуваат буквалната вредност на секој лик во цитатите. Единствен цитат не може да се појави помеѓу единечни наводници, дури и кога претходи на обратна коса црта.

Примените карактери во двојни цитати ја задржуваат буквалната вредност на сите знаци во цитатите, со исклучок на $ , ` , и \ . Ликовите $ и "го задржуваат своето посебно значење во двојни цитати. Враќањето на обрачот го задржува своето посебно значење само кога е проследено со еден од следниве знаци: $ , ` , " , \ или . Двоен цитат може да биде цитиран во двојни цитати со претходна најава со обратна коса црта.

Посебните параметри * и @ имаат посебно значење кога се во двојни цитати (видете PARAMETERS подолу).

Зборовите од образецот $ string се третираат специјално. Зборот се проширува во низа , со заменливи букви со обратна коса црта, како што е наведено во ANSI C стандардот. Копчињата за избегнување на обратна коса црта, доколку се присутни, се декодираат на следниов начин:

\ а

алармирање (ѕвонче)

\ b

backspace

\ e

бегство карактер

\ f

форма храна

\ n

нова линија

\ r

враќање на превозот

\ t

хоризонтален таб

\ v

вертикален таб

\\

обратна коса црта

\ '

еден цитат

\ nне

осум-битниот знак чија вредност е осмата вредност nnn (една до три цифри)

\ x HH

осум-битниот знак чија вредност е хексадецимална вредност HH (една или две хексадеци цифри)

\ c x

контролен карактер

Проширениот резултат е едноцифрен, како да знакот за долар не бил присутен.

Двоцифрена низа пред која е претставена знак за долар ( $ ) ќе предизвика преводот да се преведе според тековниот локал. Ако тековната локација е C или POSIX , знакот за долар е игнориран. Ако стрингот е преведен и заменет, замената е двојно цитирана.

ПАРАМЕТРИ

Параметар е ентитет кој ги зачувува вредностите. Тоа може да биде име , број или еден од специјалните знаци наведени подолу под Специјални параметри . За целите на школка, променлива е параметар означен со име . Променливата има вредност и нула или повеќе атрибути . Атрибутите се доделуваат со командата declare builtin (погледнете подолу во SHELL BUILTIN COMMANDS ).

Параметарот е поставен ако му е доделена вредност. Нулената низа е валидна вредност. Откако ќе се постави променлива, таа може да биде исклучена само со користење на командата unset builtin (види подолу SHELL BUILTIN COMMANDS ).

Променливата може да биде назначена со изјава за формата

name = [ вредност ]

Ако вредноста не е дадена, на променливата му е доделена нулта низа. Сите вредности се подложени на проширување на тилдите, параметар и променлива експанзија, команда за замена, аритметичка експанзија и отстранување цитат (видете EXPANSION подолу). Ако променливата има свој целоброен атрибут, тогаш вредноста е предмет на аритметичка експанзија дури и ако не се користи проширувањето $ ((...)) (види аритметичко проширување подолу). Разделувањето на зборови не се врши, со исклучок на "$ @" како што е објаснето подолу под Специјални параметри . Проширувањето на патеката не е изведено. Изјавите за доделување може исто така да се појават како аргументи за пријавување , наведување , извоз , само за читање и локални вградени команди.

Позициони параметри

Позиционирачки параметар е параметар означен со една или повеќе цифри, освен единечната цифра 0. Позиционите параметри се назначени од аргументите на школка кога се повикуваат и може да се прераспределат со помош на наместената вградена команда. Позициони параметри не може да се доделуваат со изјавите за доделување. Позиционирачките параметри привремено се заменуваат кога се извршува функцијата на школка (види ФУНКЦИИ подолу).

Кога позициониот параметар кој се состои од повеќе од една цифра е проширен, тој мора да биде затворен во загради (видете EXPANSION подолу).

Специјални параметри

Школка третира неколку параметри специјално. Овие параметри може да се референцираат само; доделувањето до нив не е дозволено.

*

Се проширува до позициони параметри, почнувајќи од еден. Кога експанзијата се случува во двојни наводници, се проширува на еден збор со вредноста на секој параметар одделен со првиот карактер на специјалната променлива на IFS . Тоа е, " $ * " е еквивалентно на " $ 1 c $ 2 c ... ", каде што c е првиот карактер на вредноста на променливата IFS . Доколку IFS не е поставено, параметрите се одделени со празни места. Ако IFS е нула, параметрите се приклучени без интервенирачки сепаратори.

@

Се проширува до позициони параметри, почнувајќи од еден. Кога експанзијата се случува во двојни цитати, секој параметар се проширува на посебен збор. Тоа е, " $ @ " е еквивалентно на " $ 1 " " $ 2 " ... Кога нема позициони параметри, " $ @ " и $ @ се прошират кон ништо (т.е., тие се отстранети).

#

Се проширува до бројот на позициони параметри во децимали.

?

Се проширува до статусот на неодамна извршениот нафтовод.

-

Се проширува до тековните опциски знамиња како што е наведено при повикувањето, од страна на наместената вградена команда, или оние поставени од самата школка (како што е -i опцијата).

$

Се проширува до идентификацијата на процесот на школка. Во () подслој, се проширува на идентификацијата на процесот на тековната школка, а не подслојката.

!

Се проширува во идентификацијата на процесот на неодамна извршената позадина (асинхрона) команда.

0

Се проширува до името на школка или школка скрипта. Ова е поставено при иницијализација на школка. Ако bash се повика со датотека со команди, $ 0 е поставен во името на таа датотека. Ако bash се стартува со опцијата -c , тогаш $ 0 е поставено на првиот аргумент по стрингот што треба да се изврши, ако е присутен. Инаку, тој е поставен на името на датотеката што се користи за повикување на bash , како што е дадено со аргументот нула.

_

При стартување на школка, поставете го апсолутно името на датотеката на школка или школка скрипта што се извршува како што е пренесено во листата на аргументи. Потоа, се проширува до последниот аргумент на претходната команда, по проширувањето. Исто така, поставете го на целосната датотека на секоја команда која е извршена и ставена во средина извезена во таа команда. При проверка на пошта, овој параметар го содржи името на поштенската датотека која моментално се проверува.

Шел променливи

Следните променливи се поставени од страна на школка:

BASH

Се проширува до целото име на датотека што се користи за повикување на оваа инстанца на баш .

BASH_VERSINFO

А променлива со променлива низа чии членови имаат информации за верзијата за овој пример на баш . Вредностите доделени на членовите на низата се како што следува:

BASH_VERSINFO [ 0]

Главниот број на верзијата ( пуштањето ).

BASH_VERSINFO [ 1]

Малиот број на верзијата ( верзијата ).

BASH_VERSINFO [ 2]

Ниво на печ.

BASH_VERSINFO [ 3]

Верзијата на изградбата.

BASH_VERSINFO [ 4]

Статусот на ослободување (на пример, бета1 ).

BASH_VERSINFO [ 5]

Вредноста на MACHTYPE .

BASH_VERSION

Се проширува во низа која ја опишува верзијата на овој пример на баш .

COMP_CWORD

COMP_LINE

Тековната командна линија. Оваа променлива е достапна само во функциите на школка и надворешните команди повикани од програмските објекти за завршување (видете подолу Програмирано комплетирање ).

COMP_POINT

COMP_WORDS

Променлива за низа (видете низи подолу) која се состои од индивидуални зборови во тековната командна линија. Оваа променлива е достапна само за функциите на школка повикани од програмираните објекти за завршување (видете подолу Програмирано комплетирање ).

DIRSTACK

Променлива за низа (видете низи подолу) која ја содржи тековната содржина на магацинот на директориуми. Директориумите се појавуваат во магацинот во редоследот што го прикажуваат дирзите вградени. Доделувањето на членовите на оваа променлива на низа може да се користи за модифицирање на директориуми веќе во магацинот, но pushd и popd вградените мора да се користат за додавање и отстранување на директориуми. Доделувањето на оваа променлива нема да го смени тековниот директориум. Ако DIRSTACK не е поставено, ги губи посебните особини, дури и ако се ресетира.

ЕУИД

Се проширува до ефикасното корисничко име на тековниот корисник, иницијализирано при стартување на школка. Оваа променлива е само за читање.

FUNCNAME

Името на која било функција за извршување на школка во моментов. Оваа променлива постои само кога функцијата на школка се извршува. Задачи за FUNCNAME немаат ефект и не враќаат статус на грешка. Ако FUNCNAME не е поставено, тој ги губи посебните особини, дури и ако потоа се ресетира.

ГРУПИ

Променлива со низа која ја содржи листата на групи од кои сегашниот корисник е член. Задачите на ГРУПИ немаат ефект и не враќаат статус на грешка. Ако ГРУПИ не е поставена, ги губи посебните особини, дури и ако се ресетира.

HISTCMD

Бројот на историјата, или индексот во списокот со историја, на тековната команда. Ако HISTCMD не е поставено, ги губи посебните особини, дури и ако е ресетирана потоа.

HOSTNAME

Автоматски поставете го на името на тековниот хост.

HOSTTYPE

Автоматски поставете на стринг што уникатно го опишува типот на машината на која баш се извршува. Стандардното е зависно од системот.

LINENO

Секојпат кога овој параметар е референциран, школка заменува децимален број кој го претставува тековниот секвенцијален број на линија (почнувајќи од 1) во рамките на скрипта или функција. Кога не е во сценариото или функцијата, загадената вредност не е загарантирана да биде значајна. Ако LINENO не е поставена, ги губи посебните особини, дури и ако е ресетирана потоа.

MACHTYPE

Автоматски се поставува на низа која целосно го опишува видот на системот на кој bash се извршува, во стандардниот GNU cpu-company-систем формат. Стандардното е зависно од системот.

OLDPWD

Претходниот работен директориум како што е поставен со командата cd .

ОПТАРГ

Вредноста на аргументот за последната опција обработена од командата getopts builtin (види подолу SHELL BUILTIN COMMANDS ).

OPTIND

Индексот на следниот аргумент кој треба да биде обработен од командата getopts builtin (види подолу SHELL BUILTIN COMMANDS ).

OSTYPE

Автоматски поставете ја на низа која го опишува оперативниот систем на кој баш се извршува. Стандардното е зависно од системот.

PIPESTATUS

Променлива за низа (видете низи подолу) која содржи листа на излезните вредности на статусот од процесите во најпознатите неодамна извршени нагодбени нафтоводи (кои може да содржат само една команда).

PPID

ID на процесот на родителот на школка. Оваа променлива е само за читање.

PWD

Тековниот работен директориум како што е поставен од командата cd .

СЛУЧАЈНО

Секојпат кога се користи овој параметар, се генерира случаен цел број помеѓу 0 и 32767. Низата од случајни броеви може да се иницијализира со доделување вредност на RANDOM . Ако RANDOM не е поставено, ги губи посебните особини, дури и ако се ресетира.

Одговори

Поставете ја линијата на влез прочитана од командата за читање кога нема аргументи.

SECONDS

Секојпат кога се користи овој параметар, бројот на секунди по враќањето на школка се враќа. Ако вредноста е доделена на SECONDS , вредноста вратена по следните референци е бројот на секунди од задачата плус доделената вредност. Ако SECONDS не е поставена, ги губи посебните особини, дури и ако е последователно ресетирана.

SHELLOPTS

Список од опциите на школка што е овозможено од дебелото црево. Секој збор во листата е валиден аргумент за опцијата за наместената вградена команда (видете подолу SHELL BUILTIN COMMANDS ). Опциите кои се појавуваат во SHELLOPTS се оние кои се пријавени како на on- set . Ако оваа променлива е во околината кога баш започнува, секоја опција за школка во списокот ќе биде овозможена пред да се прочитаат сите фајлови за стартување. Оваа променлива е само за читање.

SHLVL

Се зголемува по еден секој пат кога се започнува инстанца на баш .

UID

Се проширува до корисничкото ID на тековниот корисник, иницијализиран при стартување на школка. Оваа променлива е само за читање.

Следните променливи се користат од страна на школка. Во некои случаи, bash доделува стандардна вредност на променлива; овие случаи се наведени подолу.

BASH_ENV

Ако овој параметар е поставен кога bash извршува скрипта за школка, неговата вредност се толкува како име на датотека што содржи команди за иницијализација на школка, како во ~ / .bashrc . Вредноста на BASH_ENV е подложена на проширување на параметарот, замена на команди и аритметичка експанзија пред да се толкува како име на датотека. PATH не се користи за пребарување на резултантното име на датотека.

CDPATH

Патеката за пребарување за командата cd . Ова е листа на директориуми одделени со дебело црево во која школка изгледа за директориуми за одредиште наведени од командата cd . Примерокот е ".: ~: / Usr".

Колони

Се користи од избраната вградена команда за да се одреди ширината на терминалот при печатење на изборни листи. Автоматски се поставува по приемот на SIGWINCH.

ВКЛУЧУВАЈ

Променливата на низа од која bash ги чита можните дополнувања генерирани од функцијата на школка повикана од програмскиот објект за завршување (види Програмирано завршување подолу).

FCEDIT

Стандарден уредувач за Fc вградената команда.

FIGNORE

Листа на суфикси кои се дели од дебелото црево за да се игнорира извршувањето на името на датотеката (видете READLINE подолу). Името на датотеката чиј суфикс се совпаѓа со еден од записите во FIGNORE е исклучен од листата со соодветни имиња на датотеки. Примерокот е ".o: ~".

GLOBIGNORE

Листа на шаблони одделени со дебело црево дефинирање на множество имиња на датотеки што треба да се игнорираат со проширување на патеката. Ако името на датотеката што се совпаѓа со шаблонот за проширување на патеката исто така се совпаѓа со еден од шаблоните во GLOBIGNORE , тој се отстранува од листата со совпаѓања.

HISTCONTROL

Доколку е поставено на вредност на игнорираниот простор , линиите кои започнуваат со празно место не се внесени во списокот со историја. Ако е поставено на вредност на игнорирањата , не се внесуваат линии што одговараат на последната линија на историјата. Вредноста на ignoreboth ги комбинира двете опции. Ако не е поставена или ако е поставена на која било друга вредност од онаа погоре, сите линии што ги чита парсерот се зачувани на списокот на историја, предмет на вредноста на HISTIGNORE . Функцијата на оваа варијабла е заменета со HISTIGNORE . Втората и следната линија на командата со повеќе линии не се тестираат и се додаваат во историјата, без оглед на вредноста на HISTCONTROL .

HISTFILE

Името на датотеката во која е зачувана историја на командата (видете ИСТОРИЈА подолу). Стандардната вредност е ~ / .bash_history . Ако не е поставена, историјата на командата не се зачувува кога ќе излезе интерактивна школка.

ИСТИФИЛИЗИРАЈ

Максималниот број на линии содржани во историјата. Кога оваа променлива е доделена на вредност, датотеката со историја е скратена, доколку е потребно, да не содржи повеќе од тој број на линии. Стандардната вредност е 500. Источната датотека исто така е скратена на оваа големина откако ќе ја напише кога ќе излезе интерактивна школка.

HISTIGNORE

Листа на шаблони одделени со дебело црево, користена за да се одлучи која командната линија треба да биде зачувана во списокот со историја. Секоја шема е закотвена на почетокот на линијата и мора да одговара на целата линија (не е додаден имплицитен ` * '). Секоја шема се тестира во однос на линијата откако се применуваат проверките специфицирани од HISTCONTROL . Освен нормалните ликови за појавување на школка, " & " се совпаѓа со претходната линија на историјата. ` & 'може да се избегне со обратна коса црта; обратна коса црта се отстранува пред да се обиде натпревар. Втората и последователната линија од командата со повеќе линии не се тестираат и се додаваат во историјата, без оглед на вредноста на HISTIGNORE .

ИСТОРИЈАЈ

Бројот на команди кои треба да се запомнат во историјата на командата (видете ИСТОРИЈА подолу). Стандардната вредност е 500.

ДОМА

Домашниот директориум на тековниот корисник; стандардниот аргумент за командата cd builtin. Вредноста на оваа варијабла се користи и при изведување на тилда експанзија.

HOSTFILE

Содржи име на датотека во ист формат како / etc / домаќини што треба да се прочита кога школка треба да го комплетира името на компјутерот. Листата на можни довршувања на името на хостот може да се промени додека школка работи; следниот пат кога ќе се обиде да се изврши името на домаќинот откако ќе се смени вредноста, bash ја додава содржината на новата датотека во постоечката листа. Ако HOSTFILE е поставен, но нема вредност, bash се обидува да ги чита / etc / hosts за да добие листа на можни комплетибиции на името на хостот. Кога HOSTFILE не е поставена, листата на домаќини се брише.

IFS

Внатрешен сепаратор на поле што се користи за разделување на зборови по проширување и да се подели линии во зборови со командата за читање . Стандардната вредност е `` ''.

IGNOREEOF

Го контролира дејството на интерактивната школка при прием на EOF карактер како единствен влез. Ако е поставено, вредноста е бројот на последователни EOF знаци кои мора да бидат внесени како први знаци на влезната линија пред да излезе баш . Ако променливата постои, но нема нумеричка вредност или нема вредност, стандардната вредност е 10. Ако не постои, EOF го означува крајот на влезот во школка.

INPUTRC

Датотеката за датотеката за стартување readline , надминувајќи ја стандардната вредност на ~ / .inputrc (види READLINE подолу).

LANG

Се користи за одредување на категоријата на категории за било која категорија која не е избрана конкретно со променлива почнувајќи од LC_ .

LC_ALL

Оваа променлива ја надминува вредноста на LANG и која било друга LC_ променлива која специфицира категорија на локали .

LC_COLLATE

Оваа променлива го одредува редоследот на споредување што се користи при сортирање на резултатите од проширувањето на патеката и го одредува однесувањето на изразите на експозиција, класи на еквивалентност и групирање секвенци во рамките на проширување на патеката и совпаѓање на моделот.

LC_CTYPE

Оваа променлива ја одредува толкувањето на ликовите и однесувањето на класите на знаци во рамките на ширењето на патеката и совпаѓањето на моделот.

LC_MESSAGES

Оваа променлива го одредува локалето кое се користи за преведување двоцитурни стрингови претходи на $ .

LC_NUMERIC

Оваа променлива ја одредува категоријата на локал што се користи за форматирање на броеви.

ЛИНИИ

Се користи од избраната вградена команда за да се одреди должината на колоната за избор на листи за одбирање. Автоматски се поставува по приемот на SIGWINCH.

MAIL

Ако овој параметар е поставен во име на датотека и променливата MAILPATH не е поставена, bash го информира корисникот за доаѓањето на поштата во наведената датотека.

MAILCHECK

Одредува колку често (во секунди) баш проверки за пошта. Стандардно е 60 секунди. Кога е време да се провери пошта, школка ќе го стори тоа пред да се прикаже примарното барање. Ако оваа променлива не е поставена или е поставена на вредност што не е број поголем или еднаков на нула, школка ја оневозможува проверката на поштата.

MAILPATH

Листа на имиња на датотеки што се одделени со дебело црево треба да се проверат за пошта. Пораката што треба да се отпечати кога поштата ќе пристигне во одредена датотека може да биде одредена со одделување на името на датотеката од пораката со `? '. Кога се користи во текстот на пораката, $ _ се проширува до името на тековната mailfile. Пример:

MAILPATH = '/ var / mail / bfox? "Имате пошта": ~ / shell-mail? "$ _ Има пошта!"'

Баш обезбедува стандардна вредност за оваа променлива, но локацијата на корисничките поштенски фајлови што ги користи е зависна од системот (на пр., / Var / mail / $ USER ).

OPTERR

Ако е поставено на вредноста 1, bash ги прикажува пораките за грешки генерирани од командата getopts builtin (види подолу SHELL BUILTIN COMMANDS ). OPTERR се иницијализира на 1 секој пат кога се повикува школка или е извршена скрипта за школка.

ПАТ

Патеката за пребарување за команди. Тоа е листа со директориуми во кои школка ги избира командите (видете КОМАНДНА ИЗЈАВА подолу). Стандардната патека е зависна од системот и е поставена од администраторот кој инсталира баш . Заедничка вредност е `` / usr / gnu / bin: / usr / local / bin: / usr / ucb: / bin: / usr / bin :. ''.

POSIXLY_CORRECT

Ако оваа променлива е во околината кога баш започнува, школка влегува во режим на подигнување пред да ги прочита фајловите за стартување, како да е обезбедена опцијата за повикување на --posix . Ако е поставено додека школка работи, bash овозможува режим на подигнување, како да е извршена наредбата -o posix .

PROMPT_COMMAND

Ако е поставено, вредноста се извршува како команда пред да се издаде секое основно барање.

PS1

Вредноста на овој параметар е проширена (видете ПРОМОВИРАЊЕ подолу) и се користи како примарна брза стринг. Стандардната вредност е `` \ s- \ v \ $ ''.

PS2

Вредноста на овој параметар е проширена како кај PS1 и се користи како секундарна брза стринг. Стандардно е `` > ''.

PS3

Вредноста на овој параметар се користи како потсетник за командата за одбирање (видете ја SHELL GRAMMAR погоре).

PS4

Вредноста на овој параметар е проширена како кај PS1 и вредноста се печати пред секоја команда bash прикажува за време на трага за извршување. Првиот карактер на PS4 се повторува повеќе пати, колку што е потребно, за да укаже на повеќе нивоа на индирекцијата. Стандардно е `` + ''.

TIMEFORMAT

Вредноста на овој параметар се користи како низа со формат, во кој се наведува како треба да се прикажат информациите за тајминг за цевките префиксни со задржаниот збор. Карактерот % воведува бегство секвенца која е проширена на временска вредност или други информации. Бегство секвенци и нивните значења се како што следува; загради означуваат факултативни делови.

%%

Буквално % .

% [ p ] [l] R

Изминатото време во секунди.

% [ p ] [l] U

Бројот на CPU секунди поминато во корисничкиот режим.

% [ p ] [l] S

Бројот на CPU секунди поминати во системскиот режим.

% P

Процентот на процесорот, пресметан како (% U +% S) /% R.

Опционалната p е бројка која ја специфицира прецизноста , бројот на децималните цифри по децималната точка. Вредноста од 0 не предизвикува излегување на децималната точка или фракцијата. Најмногу три места по децималната точка може да се специфицираат; вредностите на p поголеми од 3 се менуваат на 3. Ако p не е одредено, се користи вредноста 3.

Опционалниот l наведува подолг формат, вклучувајќи и минути, на формата MM m SS . FF s. Вредноста на p одредува дали е вклучена или не е вклучена.

Ако оваа променлива не е поставена, bash дејствува како да ја има вредноста $ '\ nreal \ t% 3lR \ nuser \ t% 3lU \ nsys% 3lS' . Ако вредноста е нула, не се прикажуваат информации за тајмингот. Додадената нова линија се додава кога ќе се прикаже стрингот за форматот.

TMOUT

Ако е поставено на вредност поголема од нула, TMOUT се третира како стандардно тајмаут за читаното вградено. Избраната команда завршува ако влезот не пристигне по TMOUT секунди кога влегува влез од терминал. Во интерактивна школка, вредноста се толкува како број на секунди за чекање за внесување по издавањето на примарна пратка. Баш завршува откако ќе го чека тој број на секунди ако влезот не пристигне.

auto_resume

Оваа променлива го контролира начинот на кој школка се поврзува со корисникот и контролата на работното место. Ако оваа променлива е поставена, едноставни команди со еден збор без пренасочувања се третираат како кандидати за продолжување на постоечката запрена работа. Не постои двосмисленост; ако има повеќе од една работа која започнува со напишаната низа, се избира најновото работно место. Името на запрената работа, во овој контекст, е командната линија што се користи за негово стартување. Ако е точно одредено на точната вредност, испорачаната низа мора точно да го совпаѓа името на престанатото работно место; ако е поставено на подниз , понудената низа треба да одговара на подниз на името на запрената работа. Вредноста на подниз обезбедува функционалност аналогна на %? идентификатор на работа (види подолу). Доколку е поставено на која било друга вредност, доставениот стринг мора да биде префикс на име на стопирано работно место; ова обезбедува функционалност аналогна на идентификаторот за работа % .

histchars

Двата или три лика кои ја контролираат проширувањето на историјата и токенизацијата (види подолу ИСТОРИЈА ЕКСПОЗИЦИЈА ). Првиот лик е карактерот за проширување на историјата , ликот што го сигнализира почетокот на проширувањето на историјата, нормално ` ! '. Вториот знак е брз заменски знак, кој се користи како стенографија за повторно извршување на претходната команда влезе, со замена на еден низа за друг во командата. Стандардно е ` ^ '. Опционалниот третиот знак е знак кој означува дека остатокот од линијата е коментар кога се наоѓа како прв карактер на зборот, нормално ` # '. Карактерот за коментари за историјата предизвикува преместување на историјата за преостанатите зборови на линијата. Тоа не мора да предизвика парсерот на школка да ја третира остатокот од линијата како коментар.

Низи

Баш обезбедува променливи со една димензионална низа. Секоја променлива може да се користи како низа; изјавата за вграден експлицитно ќе објави низа. Не постои максимална граница за големината на низата, ниту пак услов членовите да се индексираат или да се доделуваат сосема. Низите се индексираат со цели броеви и се базираат на нула.

Низата се креира автоматски ако било која променлива е назначена за користење на името на синтаксата [ subscript ] = вредност . Индексот се третира како аритметички израз кој мора да се процени на број поголем или еднаков на нула. За да експлицитно прогласи низа, користете декларирајте -а име (видете SHELL BUILTIN COMMANDS подолу). прогласи -а име [ индекс ] е исто така прифатен; индексот е игнориран. Атрибутите може да се наведат за променлива со низа користејќи ги декларираните и самостојно вградени. Секој атрибут се однесува на сите членови на низата.

Низите се доделуваат за користење на сложени задачи со името на формуларот = ( вредност 1 ... вредност n ) , каде што секоја вредност е од формата [ subscript ] = string . Потребна е само стринг . Доколку се испорачаат опционалните загради и индекс, тој индекс е назначен; во спротивно индексот на доделениот елемент е последниот индекс доделен со изјавата плус еден. Индексирањето започнува на нула. Оваа синтакса е прифатена и од страна на изјавите вградени. Елементите на поединечни низи може да бидат назначени за користење на името [ индекс ] = синтакса на вредности претставени погоре.

Неизградената вградена се користи за уништување на низи. несоодветното име [ индекс ] го уништува елементот на низата при индекс на индекс. непроменето име , каде што името е низа, или несоодветно име [ subscript ], каде индекс е * или @ , го отстранува целиот низа.

Изјавите , локалните и readonly вградени, секој прифаќа -a опција за одредување на низа. Читаната вградена прифаќа -a опција за доделување на листа на зборови што се читаат од стандардниот влез во низа. Поставете и објавувате вградени вредности на низа на прикажување на начин што им овозможува да бидат повторно искористени како задачи.

РАЗВОЈ

Проширувањето се врши на командната линија откако е поделена на зборови. Постојат седум видови на експанзија: засилување на проширувањето , проширување на тилдите , параметар и променлива експанзија , команда за замена , аритметичка експанзија , разделување на зборови и проширување на патеката .

Редоследот на проширувањето е: проширување на проширувањето, проширување на тилде, параметар, променлива и аритметичка експанзија и команда за замена (направено на лево-десно мода), разделување на зборови и проширување на патеката.

На системи кои можат да го поддржат, постои дополнителна експанзија на располагање: замена на процесот .

Проширување на Brace

Експанзијата на браздата е механизам со кој можат да се генерираат произволни жици. Овој механизам е сличен на проширувањето на патеката , но генерираните имиња не треба да постојат. Шаблоните што треба да се прошират се прошируваат во облик на опционална преамбула , проследено со серија од стрингови одделени со запирка меѓу пар загради, проследено со опција за postscript . Преамбулата е префикс на секоја низа содржана во заградите, а постскриптот потоа се додава кон секоја резултирачка низа, проширувајќи се од лево надесно.

Екстензии на Brace може да бидат вгнездени. Резултатите од секој проширен стринг не се подредени; лево-десно ред е зачуван. На пример, { d, c, b } e се проширува во `ade ace abe '.

Експандирањето на Brace се врши пред сите други проширувања, и сите резултати што се посебни за други проширувања се зачувани во резултатот. Тоа е строго текстуално. Баш не применува никакво синтактичко толкување за контекстот на експанзијата или текстот помеѓу заградите.

Оваа конструкција обично се користи како стенографија кога заедничкиот префикс на стринговите што треба да се генерираат е подолг отколку во горниот пример:

mkdir / usr / local / src / bash / (старо, ново, dist, грешки)

или

root /usr/{ucb/{ex,edit},lib/{ex?.**howhow_ex}}

Експанзијата на Brace воведува мала некомпатибилност со историските верзии на sh . sh не ги третира специјално отворите за затворање или затворање, кога тие се појавуваат како дел од еден збор, и ги зачувува во излезот. Баш ги отстранува протезите од зборови како последица на експанзијата. На пример, зборот што е внесен во sh како датотека {1,2} се појавува идентично во излезот. Истиот збор се појавува како file1 file2 по проширувањето на bash . Ако е посакувана строга компатибилност со sh , започнете баш со опцијата + B или оневозможете проширување на експанзија со опцијата + B до поставената команда (видете подолу SHELL BUILTIN COMMANDS ).

Проширување на Тилда

Ако зборот започнува со карактер на тилда кој не се нотира (` ~ '), сите типови карактери кои претходат на првата коса црта (или сите знаци, ако не постои коса црта), се сметаат за префикс на тилда . Ако не се цитирани ниеден од ликовите на тилдниот префикс, ликовите во тилдниот префикс по тилдата се третираат како можно име за најава . Ако ова име за најава е нула низа, тилдата се заменува со вредноста на параметарот на школка HOME . Доколку HOME не е поставено, наместо тоа, се заменува домашниот директориум на корисникот кој ја извршува школка. Инаку, тилдниот префикс се заменува со домашниот директориум поврзан со наведеното корисничко име.

Ако тилдниот префикс е `~ + ', вредноста на променливата PWD на школка го заменува тилдниот префикс. Ако тилдниот префикс е `~ - ', вредноста на школка променлива OLDPWD , ако е поставена, е заменет. Ако знаците кои следат тилда во тилда-префиксот се состојат од број N , опционално префикс со `+ 'или` -', тилдниот префикс се заменува со соодветниот елемент од стекот на директориумот, како што би бил прикажан од страна на дири вградени повикани со тилда-префиксот како аргумент. Ако ликовите кои следат тилда во тилдниот префикс се состојат од број без водечки `+ 'или` -', `+ 'се претпоставува.

Ако името за најава е невалидно, или проширувањето на тилдите не успее, зборот е непроменет.

Секоја променлива задача е проверена за некотирани тилд-префикси веднаш по : или = . Во овие случаи, експанзија на тилдите исто така се изведува. Следствено, може да се користат имиња на датотеки со тилда во доделувањата на PATH , MAILPATH и CDPATH , а школка ја доделува проширената вредност.

Проширување на параметри

Знакот ` $ 'воведува проширување на параметар, замена на команди или аритметичка експанзија. Името на параметарот или симболот што треба да се прошират може да бидат заградени во загради, кои се опционални, но служат за заштита на променливата која треба да се прошири од карактери што веднаш следат, што може да се толкува како дел од името.

Кога се користат загради, соодветната завршна прицврстувач е првата ` } 'не е избегната со обратна коса црта или во цитираниот стринг, а не во рамките на вградена аритметичка експанзија, команда за замена или проширување на параметар.

Вредноста на параметарот е заменет. Заградите се потребни кога параметарот е позициски параметар со повеќе од една цифра или кога параметарот го следи карактер кој не треба да се толкува како дел од неговото име.

Во секој од случаите подолу, зборот е предмет на проширување на тилдите, проширување на параметарот, команда за замена и аритметичка експанзија. Кога не вршат проширување на подниз, баш тестови за параметар кој е неизложен или нула; Испуштањето на дебелото црево резултира со тест само за параметар кој не е поставен.

Користете стандардни вредности . Доколку параметарот е нерасположен или не е нил, проширувањето на зборот е заменето. Инаку, вредноста на параметарот е заменет.

Доделете ги стандардните вредности . Доколку параметарот е несовршен или нула, проширувањето на зборот се доделува на параметар . Вредноста на параметарот потоа се заменува. Позициони параметри и специјални параметри може да не се доделуваат на овој начин.

Прикажи Грешка ако Null или Unset . Ако параметарот е нула или не е поставена, проширувањето на зборот (или пораката до тој ефект ако зборот не е присутна) е запишано во стандардната грешка и школка, ако не е интерактивна, излегува. Инаку, вредноста на параметарот е заменет.

Користете друга вредност . Ако параметарот е нула или не е поставена, ништо не е заменето, инаку проширувањето на зборот е заменето.

Се проширува на имињата на променливите чии имиња започнуваат со префикс , одделени со првиот карактер на специјалната променлива на IFS .

Должината во знаците на вредноста на параметарот е заменета. Ако параметарот е * или @ , вредноста заменета е бројот на позициони параметри. Ако параметарот е името на низата индексирано со * или @ , вредноста заменета е бројот на елементи во низата.

Зборот е проширен за да произведе шема исто како и во ширењето на патеката. Ако моделот се совпаѓа со почетокот на вредноста на параметарот , тогаш резултатот од експанзијата е проширената вредност на параметарот со најкраткиот модел на појавување (случајот " # ") или најдолгиот модел на појавување (" ## " случајот) е избришан. Ако параметарот е @ или * , операцијата за отстранување на модот се применува за секој позициски параметар за возврат, а експанзијата е резултирачкиот список. Ако параметарот е променлива со низа индексирана со @ или * , операцијата за отстранување на модот се применува на секој член од низата за возврат, а експанзијата е резултирачката листа.

Зборот е проширен за да произведе шема исто како и во ширењето на патеката. Ако образецот се совпаѓа со заостанат дел од проширената вредност на параметарот , тогаш резултатот од проширувањето е проширената вредност на параметарот со најкраткиот модел на појавување (случајот " % ") или најдолгиот модел на појавување (" % % "" случај) е избришан. Ако параметарот е @ или * , операцијата за отстранување на модот се применува за секој позициски параметар за возврат, а експанзијата е резултирачкиот список. Ако параметарот е променлива со низа индексирана со @ или * , операцијата за отстранување на модот се применува на секој член од низата за возврат, а експанзијата е резултирачката листа.

Моделот е проширен за да произведе шема исто како и во проширувањето на патеката. Параметарот е проширен, а најдолгото совпаѓање на моделот во однос на неговата вредност се заменува со низа . Во првата форма се заменува само првиот натпревар. Втората форма ги предизвикува сите натпревари на шаблонот да се заменат со низа . Ако модел почнува со # , тој мора да се совпаѓа на почетокот на проширената вредност на параметарот . Ако модел почнува со % , мора да се совпадне на крајот од проширената вредност на параметарот . Ако стрингот е нула, се поклопуваат матриците на моделот и може да се испушти следнава шема . Доколку параметарот е @ или * , операцијата за замена се применува за секој позициски параметар за возврат, а експанзијата е резултирачкиот список. Ако параметарот е променлива со низа индексирана со @ или * , операцијата за замена се применува на секој член од низата за возврат, а проширувањето е резултирачкиот список.

Командна замена

Замена на командата овозможува излез на команда да го замени името на командата. Постојат две форми:

$ ( команда )

или

` команда`

Баш ја извршува експанзијата со извршување на команда и замена на командата за замена со стандардниот излез на командата, со какви било заостанати нови линии избришани. Вметнатите нови линии не се бришат, но може да се отстранат за време на разделување на зборови. Замена на командата $ (мачка датотека ) може да се замени со еквивалентна, но побрза $ (< датотека ).

Кога се користи стариот стил за замена на засекнатата форма, обратна коса црта го задржува буквалното значење, освен кога е проследено со $ , ` , или \ . Првиот backquote што не му претходи на обратна коса црта ја прекинува командната замена. Кога ја користите формата $ ( команда ), сите ликови помеѓу загради ги сочинуваат командата; никој не се третира специјално.

Заменските команди може да бидат вгнездени. За да се гнезди при користење на обрасната форма, избегнете ги внатрешните закани со коси црти.

Ако супституцијата се појавува во двојни цитати, резултатите не се вршат по разделување на зборовите и проширување на патеката.

Аритметичка експанзија

Аритметичката експанзија овозможува проценка на аритметички израз и замена на резултатот. Формат за аритметичка експанзија е:

$ (( израз ))

Изразот се третира како да е во двојни цитати, но двојниот цитат во заградите не се третира посебно. Сите токени во изразот се подложени на проширување на параметарот, експанзија на низата, замена на команда и отстранување цитат. Аритметичките замени можат да бидат вгнездени.

Оценувањето се врши според правилата наведени подолу под АРИТМЕТСКА ЕВАЛУАЦИЈА . Ако изразот е невалиден, bash отпечатоци порака која укажува на неуспех и не се случува замена.

Промена на процесот

Процесот за замена е поддржан на системи кои поддржуваат именувани цевки ( FIFOs ) или методот / dev / fd за именување на отворени датотеки. Потребна е форма на <( листа ) или > ( листа ) . Листата на процеси се извршува со влез или излез поврзан со FIFO или некоја датотека во / dev / fd . Името на оваа датотека се пренесува како аргумент на тековната команда како резултат на експанзијата. Ако се користи образецот > ( листа ) , запишувањето во датотеката ќе обезбеди влез за листата . Ако се користи образецот <( листа ) , датотеката што се пренесува како аргумент треба да се прочита за да се добие излез од листата .

Кога е достапно, процесот на замена се врши истовремено со параметар и променлива експанзија, команда за замена и аритметичка експанзија.

Разделување на зборови

Школка ги скенира резултатите од проширувањето на параметарот, замената на командата и аритметичката експанзија што не се појавија во двојни цитати за разделување на зборови .

Школката го третира секој карактер на IFS како раздвојувач и ги дели резултатите од другите проширувања на зборови на овие ликови. Доколку IFS не е поставена, или нејзината вредност е точно , стандардно, тогаш секоја секвенца на IFS- карактери служи за разграничување на зборовите. Доколку IFS има вредност различна од стандардната, тогаш на почетокот и крајот на зборот се игнорираат секвенците на просторот и јазичето на празно место , се додека белетричниот знак е во вредноста на IFS ( IFS празно место). Секој знак во IFS кој не е IFS празни места, заедно со сите соседни IFS празни букви, го ограничува полето. Низа од IFS празни празни букви исто така се третира како раздвојувач. Ако вредноста на IFS е нула, не се случува разделување на зборови.

Експлицитни нулти аргументи ( "" или "" ) се задржани. Имплицитните нулти аргументи кои не се искористени, кои произлегуваат од проширување на параметри кои немаат вредности, се отстранети. Ако параметар без вредност е проширен во двојни цитати, нула аргументот е резултат и е задржан.

Имајте на ум дека ако не се случи проширување, не се прави разделба.

Проширување на патеката

По разделување на зборови, освен ако не е поставена опцијата -f , bash го скенира секој збор за ликовите * ,? , и [ . Ако се појави еден од овие знаци, тогаш зборот се смета за модел и се заменува со азбучен редослед листа на имиња на датотеки што се совпаѓаат со моделот. Ако не се пронајдат имиња на совпаѓачки имиња, и опцијата за школка nullglob е оневозможена, зборот останува непроменет. Ако опцијата nullglob е поставена и не се пронајдени совпаѓања, зборот е отстранет. Ако опцијата за школка nocaseglob е овозможена, натпреварот се врши без оглед на случајот со азбучни знаци. Кога се користи шаблон за проширување на патеката, карактерот ``. '' На почетокот на името или веднаш по коса црта мора експлицитно да се совпаѓа, освен ако не е поставена опцијата на dotglob на школка. Кога се совпаѓаат со патеката, карактерот на коса црта секогаш мора да се израмни експлицитно. Во други случаи, знакот ``. '' Не се третира посебно. Погледнете го описот на продавницата подолу под SHELL BUILTIN COMMANDS за опис на опциите за nocaseglob , nullglob и dotglob .

Променливата на GLOBIGNORE на школка може да се користи за да се ограничи намената на имиња на датотеки што одговараат на моделот . Ако е поставен GLOBIGNORE , секое совпаѓачко име на датотека кое исто така се совпаѓа со еден од шаблоните во GLOBIGNORE е отстранет од списокот на натпревари. Имињата на датотеките ``. '' И `` .. '' секогаш се игнорираат, дури и кога е поставен GLOBIGNORE . Сепак, поставувањето на GLOBIGNORE има ефект на овозможување на опцијата "dotglob shell", така што сите други имиња на датотеки кои почнуваат со ``. '' Ќе се совпаѓаат. За да го добиете старото однесување за игнорирање на имињата на датотеките кои започнуваат со ``. '' , Направете ``. * '' Еден од шаблоните во GLOBIGNORE . Опцијата dotglob е оневозможена кога GLOBIGNORE не е поставена.

Усогласување на моделот

Секој карактер кој се појавува во шаблон, различен од специјалните шаблони на шаблонот опишан подолу, се совпаѓа со себе. Карактерот NUL може да не се појави во шема. Специјалните шаблони мора да бидат цитирани ако тие треба да се совпаѓаат буквално.

Специјалните шаблони на знакот го имаат следново значење:

*

Се совпаѓа со било која низа, вклучувајќи ја нултата низа.

?

Се совпаѓа со секој единствен знак.

[...]

Се совпаѓа со било кој од приложените знаци. Парот на знаци разделени со цртичка означува опсег израз ; се совпаѓа секој карактер кој се разликува помеѓу овие два знака, вклучително со користење на секвенцата за собирање на сегашните локални јазици и множеството карактери. Ако првиот лик што следи [ е ! или a ^ тогаш секој карактер кој не е затворен е истиот. Редоследот на сортирање на карактери во изразите на опсег е определен од тековната локација и вредноста на LC_COLLATE променливата на школка, ако е поставена. A - може да се совпаѓа со вклучување како прв или последен карактер во сетот. A ] може да се совпадне со вклучување како прв карактер во сетот.

Во [ и ] , класи на знаци може да се специфицираат со помош на синтаксата [: class :] , каде што класата е една од следните класи дефинирани во POSIX.2 стандардот:

alnum alpha ascii празно cntrl цифрен графикон долен печатење празно место горен збор xdigit
Класата на знаци се совпаѓа со секој карактер што припаѓа на таа класа. Класата со знаци на зборови ги совпаѓа букви, цифри и знакот _.

Во рамките на [ и ] , класата на еквивалентност може да биде одредена со користење на синтаксата [= c =] , која ги совпаѓа сите карактери со иста тежина на споредување (како што е дефинирано со тековниот локал) како знак c .

Во рамките на [ и ] , синтаксата [. симбол .] одговара на симболот симбол за собирање.

Ако опцијата extglob shell е овозможена со користење на вградената продавница, се препознаваат неколку проширени шеми за појавување на модел. Во следниов опис, моделот-листа е листа на еден или повеќе обрасци разделени со | . Композитните модели може да се формираат со користење на еден или повеќе од следните под-обрасци:

? ( шема-листа )

Се совпаѓа со нула или една појава на дадени обрасци

* ( шема-листа )

Се совпаѓа со нула или повеќе појавувања на дадени обрасци

+ ( шема-листа )

Се совпаѓа со една или повеќе појавувања на дадени обрасци

@ ( шема-листа )

Се совпаѓа со точно еден од дадените модели

! ( шема-листа )

Се совпаѓа со ништо, освен еден од дадените обрасци

Цитат Отстранување

По претходните проширувања, сите непоттирани појави на знаците \ , ' и " кои не се резултат на една од горенаведените проширувања се отстранети.

РЕДИЦИКЦИЈА

Пред да се изврши командата, нејзиниот влез и излез може да се пренасочат со специјална нотација толкувана од школка. Редирекцијата исто така може да се користи за отворање и затворање на датотеки за моменталната околина за извршување на школка. Следниве оператори за пренасочување може да претходат или да се појавуваат било каде во рамките на едноставна команда или може да следат команда . Пренасочувањата се обработуваат по редоследот по кој се појавуваат, од лево кон десно.

Во следниве описи, ако бројот на дескрипторот на датотеката е испуштен, а првиот карактер на операторот за пренасочување е < , пренасочувањето се однесува на стандардниот влез (дескриптор на датотека 0). Ако првиот карактер на операторот за пренасочување е > , пренасочувањето се однесува на стандардниот излез (дескриптор на фајл 1).

Зборот што следи по пренасочувачкиот оператор во следните описи, освен ако не е поинаку наведено, се подложува на проширување на проширувањето, проширување на тилдите, проширување на параметарот, команда за замена, аритметичка експанзија, отстранување цитати, проширување на патеката и разделување на зборови. Ако се прошири на повеќе од еден збор, bash пријавува грешка.

Имајте на ум дека редоследот на пренасочувањата е значаен. На пример, командата

ls > dirlist 2 > & 1

насочува и стандарден излез и стандардна грешка во датотеката dirlist , додека командата

ls 2 > & 1 > dirlist

го насочува само стандардниот излез на датотеката dirlist , бидејќи стандардната грешка беше дупликат како стандарден излез пред стандардниот излез да биде пренасочен на dirlist .

Баш се справува со неколку датотеки посебно кога тие се користат во пренасочувања, како што е опишано во следната табела:

/ dev / fd / fd

Ако fd е валиден цел број, датотечниот дескриптор fd е дупликат.

/ dev / stdin

Дескриптор на датотека 0 е дупликат.

/ dev / stdout

Дескриптор на датотека 1 е дупликат.

/ dev / stderr

Датотека 2 на датотеката е дупликат.

/ dev / tcp / host / port

Ако домаќинот е валидна име или интернет адреса, а портата е цел број или име на услуга, баш се обидува да отвори TCP-врска до соодветниот сокет.

/ dev / udp / host / port

Ако компјутерот е валиден име на домен или интернет адреса, а портата е цел број или име на услуга, баш се обидува да отвори UDP-поврзување со соодветниот сокет.

Неуспехот да се отвори или да се создаде датотека предизвикува пренасочување да не успее.

Внеси пренасочување

Пренасочувањето на внесот предизвикува датотека чие име е резултат на проширувањето на зборот што треба да се отвори за читање на дескриптор на датотека n или стандардниот влез (дескриптор на датотека 0), ако n не е одредено.

Општиот формат за пренасочување на внесот е:

[ n ] < збор

Пренасочување на излезот

Пренасочувањето на излезот предизвикува датотека чие име е резултат на проширувањето на зборот што треба да се отвори за пишување на дескриптор на датотека n или стандардниот излез (дескриптор на фајл 1) ако n не е наведен. Ако датотеката не постои, таа е креирана; ако постои, тоа е скратено на нула големина.

Општ формат за пренасочување на излез е:

[ n ] > збор

Ако операторот за пренасочување е > и опцијата noclobber за поставената вградена е овозможена, пренасочувањето ќе пропадне ако датотеката чие име е резултат на проширување на зборот постои и е редовна датотека. Ако операторот за пренасочување е > | , или операторот за пренасочување е > и опцијата noclobber за наместената вградена команда не е овозможена, пренасочувањето се обидува дури и ако датотеката именувана по збор постои.

Додавање на пренасочен излез

Пренасочувањето на излез на овој начин предизвикува датотека чие име резултира од проширување на зборот што треба да се отвори за додавање на дескриптор на датотека n или стандардниот излез (дескриптор на датотека 1) ако n не е одредено. Ако датотеката не постои, таа е креирана.

Општ формат за додавање на излез е:

[ n ] >> збор

Пренасочување на стандардниот излез и стандардна грешка

Баш овозможува и стандардниот излез (дескриптор на фајл 1) и стандардниот излез за грешка (дескриптор на датотеката 2) да се пренасочат на датотеката чие име е проширувањето на зборот со овој конструкт.

Постојат два формати за пренасочување на стандардниот излез и стандардна грешка:

&> зборот

и

> & збор

Од двете форми, првиот е најпосакуван. Ова е семантички еквивалентно на

> збор 2 > & 1

Еве Документи

Овој тип пренасочување ја инструктира школка за читање на влез од тековниот извор додека не се види линија која содржи само збор (без заостанувачки празнини). Сите линии што се читаат до таа точка потоа се користат како стандарден влез за команда.

Форматот на овде-документи е:

<< [ - ] word - разграничувач на документот

Не се врши проширување на параметар, замена на команди, аритметичка експанзија или проширување на патеката на збор . Ако се цитираат некои знаци во зборот , раздвојувачот е резултат на отстранување на цитат на збор , а линиите во тука-документот не се прошируваат. Ако зборот е непроверен, сите линии на овде-документот се подложени на проширување на параметарот, замена на командата и аритметичка експанзија. Во вториот случај, секвенцата на знаци \ е игнорирана, и \ мора да се користи за да ги цитираме знаците \ , $ , и ` .

Ако операторот за пренасочување е << - , тогаш сите водечки јазични знаци се одземаат од влезните линии и линијата која ги содржи разграничувачите . Ова им овозможува на овде-документите во рамките на школка скрипти да бидат вовлечени на природен начин.

Еве ги низите

Варијанта од тука документи, форматот е:

<<< збор

Зборот се проширува и се доставува до командата на неговиот стандарден влез.

Дуплирање на дескриптори на датотеки

Операторот за пренасочување

[ n ] <& збор

се користи за дуплирање на дескриптори на влезни датотеки. Ако зборот се прошири на една или повеќе цифри, дескрипторот на датотеката означен со n е направен како копија од тој дескриптор на датотека. Ако цифрите во збор не наведуваат дескриптор на датотека отворен за внесување, се јавува грешка за пренасочување. Ако зборот евалуира до - , дескрипторот на датотеката n е затворен. Ако n не е одредено, се користи стандардниот влез (дескриптор на датотека 0).

Операторот

[ n ] > & збор

се користи слично на дупликат дескриптори на излезни датотеки. Ако n не е одредено, се користи стандардниот излез (дескриптор на датотека 1). Ако цифри во збор не наведуваат дескриптор на датотека отворен за излез, се јавува грешка при пренасочување. Како посебен случај, ако n е испуштен, а зборот не се прошири на една или повеќе цифри, стандардниот излез и стандардната грешка се пренасочени како што е опишано претходно.

Преместување на дескриптори на датотеки

Операторот за пренасочување

[ n ] <& цифра -

ја поместува ознаката за дескриптор на датотеката во дескриптор на датотека n или стандардниот влез (дескриптор на датотека 0), ако n не е одредено. цифрата е затворена откако е дупликат на n .

Слично на тоа, операторот за пренасочување

[ n ] > & цифра -

ја поместува ознаката за дескриптор на датотеката во дескриптор на датотека n или стандардниот излез (дескриптор на датотека 1) ако n не е одредено.

Отварање на дескриптори на датотеки за читање и пишување

Операторот за пренасочување

[ n ] <> збор

предизвикува фајл чие име е проширување на зборот кој ќе се отвори за читање и пишување на дескриптор на датотека n или на дескриптор на датотека 0 ако n не е одредено. Ако датотеката не постои, таа е креирана.

АЛИЈАЗ

Алијасите дозволуваат низа да биде заменета со еден збор кога се користи како прв збор од едноставна команда. Школка ја одржува листата на алијаси кои можат да се постават и не се поставени со командите за внесување на алијас и нелиаси (видете подолу). Првиот збор од секоја команда, ако не е котирана, се проверува дали има алијас. Ако е така, тој збор се заменува со текстот на псевдонимот. Името на алијас и заменскиот текст може да содржат валиден внес на школка, вклучувајќи ги и горните мета ознаки наведени погоре, со исклучок дека името на алијас не може да содржи = . Првиот збор од текстот за замена се тестира за алијаси, но зборот што е идентичен со алијас што се проширува не се проширува по втор пат. Ова значи дека некој може да се алијас ls да ls -F , на пример, и bash не се обидува рекурзивно да го прошири текстот за замена. Ако последниот знак на алијасната вредност е празно , тогаш следниот команден збор по алијас се проверува и за проширување на алијас.

Алијаси се создаваат и се наведуваат со командата алијас и се отстрануваат со командата unalias .

Не постои механизам за користење аргументи во текстот за замена. Ако се потребни аргументи, треба да се користи функцијата на школка (види ФУНКЦИИ подолу).

Алијасите не се прошируваат кога школка не е интерактивна, освен ако опцијата expand_aliases не е поставена со користење на shopt (види го описот на shopt под SHELL BUILTIN COMMANDS подолу).

Правилата што се однесуваат на дефинирањето и употребата на псевдонимите се малку збунувачки. Баш секогаш чита барем една цела линија на внесување пред да изврши некоја од командите на таа линија. Псевдоните се прошируваат кога командата е прочитана, а не кога е извршена. Затоа, дефиницијата за алијас што се појавува на иста линија како и друга команда не стапи на сила додека не се прочита следната линија на внесување. Новиот алијас не влијае на командите кои следат дефиницијата за алијас на таа линија. Ова однесување исто така е проблем кога се извршуваат функциите. Алијасите се прошируваат кога се чита дефиниција на функција, а не кога е извршена функцијата, бидејќи дефиницијата на функцијата е самата сложена команда. Како последица на тоа, алијаси дефинирани во функција не се достапни се додека не се изврши таа функција. За да бидете безбедни, секогаш дефинирајте алиас дефиниции на посебна линија, и не користете алијас во сложени команди.

За речиси секоја цел, псевдоните се заменуваат со функциите на школка.

ФУНКЦИИ

Школка функција, дефинирана како што е опишано погоре под SHELL GRAMMAR , чува серија на команди за подоцнежно извршување. Кога името на функцијата на школка се користи како едноставно командно име, се извршува листата на команди поврзани со таа функција. Функциите се извршуваат во контекст на тековната школка; не се создава нов процес за да се интерпретираат (спротивно на ова со извршување на скрипта за школка). Кога се извршува функцијата, аргументите за функцијата стануваат параметри на позицијата за време на неговото извршување. Специјалниот параметар # се ажурира за да ја одрази промената. Позициониот параметар 0 е непроменет. Променливата FUNCNAME е поставена на името на функцијата додека функцијата се извршува. Сите други аспекти на околината за извршување на школка се идентични помеѓу функцијата и неговиот повикувач, со исклучок дека стапицата DEBUG (видете го описот на стапицата вградена под SHELL BUILTIN COMMANDS подолу) не е наследена, освен ако функцијата не е дадена на атрибутот трага ( видете го описот на декларираниот вграден подолу).

Променливите локални на функцијата може да се декларираат со локалната вградена команда. Вообичаено, варијаблите и нивните вредности се делат помеѓу функцијата и неговиот повикувач.

Ако вградената команда се врати во функција, функцијата завршува и извршувањето продолжува со следната команда по повикот на функцијата. Кога функцијата завршува, вредностите на позициони параметри и специјалниот параметар # се враќаат на вредностите што ги имале пред извршувањето на функцијата.

Имињата на функциите и дефинициите може да бидат наведени со опцијата -f да ги пријавуваат или внесуваат вградените команди. Опцијата -F за објавување или наредување ќе ги наведува само имињата на функциите. Функциите можат да се извезат, така што подсловите автоматски ги дефинираат со опцијата -f за вградениот извоз .

Функциите можат да бидат рекурзивни. Нема ограничување на бројот на рекурзивни повици.

АРИТМЕТСКА ЕВАЛУАЦИЈА

Школка овозможува аритметички изрази да се евалуираат, под одредени околности (видете ја дозволата за вградена команда и аритметичката експанзија ). Евалуацијата се врши во цели броеви со фиксна ширина без проверка за претекување, иако поделбата со 0 е заглавена и обележана како грешка. Операторите и нивните приоритети и асоцијативност се исти како и на јазикот C. Следнава листа на оператори е групирана во нивоа на оператори со еднаков приоритет. Нивоата се наведени по редослед на опаѓање.

id ++ id -

променлива пост-инкрементација и пост-декрет

++ id - id

варијабилен пред-зголемување и пред-декрет

- +

унарен минус и плус

! ~

логична и битната негација

**

експоненцијација

* /%

множење, поделба, остаток

+ -

Покрај тоа, одземање

<< >>

лево и десно битните промени

<=> = <>

споредба

==! =

еднаквост и нееднаквост

& &

битните AND

^

битна ексклузивна ИЛИ

|

битните ИЛИ

&&

логично И

||

логично ИЛИ

expr ? expr : expr

условно оценување

= * = / =% = + = - = << = >> = & = ^ = | =

задача

expr1 , expr2

запирка

Променливите на школка се дозволени како операнди; експанзија на параметарот се врши пред да се евалуира изразот. Во рамките на израз, школка променливи, исто така, може да се референцира по име, без користење на синтаксата за проширување на параметарот. Вредноста на променливата се оценува како аритметички израз кога се референцира. Променливата на школка не мора да има свој атрибут кој ќе биде вклучен во израз.

Константите со водечки 0 се толкуваат како октални броеви. Водечкиот 0x или 0X означува хексадецимално. Инаку, броевите имаат форма [ база # ] n, каде што базата е децимален број помеѓу 2 и 64 што ја претставува аритметичката основа, а n е број во таа база. Ако базата # е испуштена, тогаш се користи база 10. Цифри поголеми од 9 се претставени со мали букви, големи букви, @ и _, во тој редослед. Ако основата е помала или еднаква на 36, малите и големи букви може да се користат заменливи за да претставуваат броеви помеѓу 10 и 35.

Операторите се оценуваат по редослед на приоритет. Суб-изразите во загради се прва евалуирана и може да ги надминат правилата за приоритет погоре.

СОСТОЈБИТЕ ИЗРАЗУВАЊА

Условните изрази се користат од [[ сложената команда и тестот и [ вградените команди за тестирање на атрибутите на датотеката и извршување на низа и аритметички споредби. Изразите се формираат од следните унарни или бинарни прелиминарни избори. Ако некој аргумент за датотеката на еден од прелиминарните е во форма / dev / fd / n , тогаш дескрипторот на датотеката n се проверува. Ако аргументот за датотеката на еден од главните е еден од / dev / stdin , / dev / stdout или / dev / stderr , дескрипторот на датотеката 0, 1 или 2, соодветно, се проверува.

датотека

Точно ако датотеката постои.

датотека

Точно ако датотеката постои и е посебна датотека со блок.

-c датотека

Точно, ако постои датотека и е специјална датотека со знак.

-d датотека

Точно ако постои датотека и е директориум.

-e датотека

Точно ако датотеката постои.

-f датотека

Точно ако датотеката постои и е редовна датотека.

-g датотека

Точно ако датотеката постои и е поставена-група-id.

-h датотека

Точно ако датотеката постои и е симболичка врска.

-k датотека

Точно, ако постои датотека и е поставен неговиот "леплив" бит.

-p датотека

Точно ако постои датотека и е именувана цевка (FIFO).

-r датотека

Точно ако датотеката постои и е читлива.

-s датотека

Точно ако датотеката постои и има големина поголема од нула.

-t fd

Точно ако дескрипторот на датотеката fd е отворен и се однесува на терминал.

-u датотека

Точно, ако постои датотека и е поставен неговиот бит-корисник-id.

-w датотека

Точно ако датотеката постои и може да се запише.

-x датотека

Точно ако датотеката постои и е извршна.

датотека

Точно ако датотеката постои и е во сопственост на ефективниот кориснички ID.

-G датотека

Точно, ако датотеката постои и е во сопственост на ефективниот идентификатор на групата.

-L датотека

Точно ако датотеката постои и е симболичка врска.

-S датотека

Точно ако датотеката постои и е приклучок.

-N датотека

Точно ако датотеката постои и е изменета од последното читање.

file1 - nt file2

Точно ако датотеката1 е понова (според датумот на модификација) од датотеката2 , или ако датотеката1 постои и датотеката2 не.

file1 - ot file2

Точно ако датотеката1 е постара од датотеката2 , или ако датотеката2 постои и датотеката1 не.

file1 -ef датотека2

Точно ако датотеката1 и датотеката2 се однесуваат на истиот уред и инод броеви.

-ооптер

Точно, ако е овозможено опцијата за опцијата за школка. Погледнете ја листата на опции под описот на опцијата до поставениот вграден подолу.

стринг

Вистина ако должината на стрингот е нула.

стринг

стринг

Вистина ако должината на низата е не-нула.

string1 == стринг2

Точно ако стрингови се еднакви. = може да се користи наместо == за строга POSIX усогласеност.

string1 ! = string2

Точно ако низите не се еднакви.

string1 < низа2

Точно ако string1 сортира пред string2 лексикографски во тековната локација.

string1 > стринг2

Точно ако string1 сортира по стринг2 лексикографски во тековниот локал.

arg1 ОП arg2

ОП е една од -еq , -не , -lt , -ле , -gt , или -ге . Овие аритметички бинарни оператори се вратиле точно ако arg1 е еднаква на, не еднаква на, помала од, помала или еднаква на, поголема од, или поголема од или еднаква на arg2 , соодветно. Arg1 и arg2 може да бидат позитивни или негативни цели броеви.

Едноставна КОМАНДНА ЕКСПАНЗИЈА

Кога е извршена едноставна команда, школка ги извршува следните проширувања, задачи и пренасочувања, од лево кон десно.

1. Зборовите што парсерот ги обележал како променливи задачи (оние кои претходат на името на командата) и пренасочувања се зачувуваат за подоцнежна обработка.

2. Зборовите кои не се променливи задачи или пренасочувања се прошируваат. Ако некои зборови останат по проширување, првиот збор е земен како име на командата, а останатите зборови се аргументи.

3. Редирекциите се изведуваат како што е опишано погоре под REDIRECTION .

4. Текстот по = во секоја променлива задача е подложена на тилда експанзија, проширување на параметарот, замена на командата, аритметичка експанзија и отстранување цитат пред да бидат назначени на променливата.

Ако нема име на команда, задачите на променливата влијаат на тековната школка. Во спротивно, променливите се додаваат во околината на извршената команда и не влијаат врз тековната школка. Ако некоја од задачите се обидува да додели вредност на променлива која е само за читање, се јавува грешка, а командата излегува со статус што не е нула.

Ако нема име на команда, се вршат пренасочувања, но не влијаат врз тековната школка. Грешка при пренасочување предизвикува командата да излезе со ненултен статус.

Ако има име на команда оставено по проширувањето, извршувањето продолжува како што е опишано подолу. Инаку, командата ќе излезе. Ако една од проширувањата содржеше команда за замена, излезниот статус на командата е излезниот статус на извршената последна замена на командата. Ако немаше командни замени, командата излегува со статус на нула.

КОМАНДНО ИЗВРШУВАЊЕ

Откако командата е поделена на зборови, ако резултира со едноставна команда и опционална листа на аргументи, се преземаат следниве дејства.

Ако името на командата не содржи цртички, школка обидува да го лоцира. Ако постои функција на школка со тоа име, таа функција се повикува како што е опишано погоре во FUNCTIONS . Ако името не се совпаѓа со некоја функција, школка ја пребарува во списокот на вградени граници. Ако се пронајде совпаѓање, тој вграден е повикан.

Ако името не е ниту функција на школка, ниту е вградено и не содржи косини, bash го пребарува секој елемент од PATH за директориум кој содржи извршна датотека со тоа име. Баш користи табела за хаш за да ги запамети целосните патеки на извршни датотеки (видете го хашот под SHELL BUILTIN COMMANDS подолу). Целосно пребарување на директориумите во PATH се врши само ако командата не е пронајдена во табелата Hash. Ако потрагата е неуспешна, школка отпечати порака за грешка и враќа статус на излез од 127.

Ако пребарувањето е успешно или ако името на командата содржи една или повеќе коса, школка ја извршува именуваната програма во посебна средина за извршување. Аргументот 0 е поставен на даденото име, а останатите аргументи на командата се поставени на дадените аргументи, доколку ги има.

Ако ова извршување не успее бидејќи датотеката не е во извршна форма, а датотеката не е директориум, се претпоставува дека е школка скрипта , датотека која содржи команди за школка. Подслој е создаден за да го изврши. Ова подмножество се реиницијализира, така што ефектот е како да се повика нова школка за да се справи со скриптата, со исклучок на детето да ги задржи локациите на командите запаметени од родителот (видете го хашот подолу под SHELL BUILTIN COMMANDS ).

Ако програмата е датотека која започнува со #! , остатокот од првата линија одредува преведувач за програмата. Школката го извршува наведениот преведувач на оперативни системи кои самите не се справуваат со овој извршен формат. Аргументите на преведувачот се состојат од еден опционален аргумент по името на преведувачот на првата линија на програмата, проследено со името на програмата, проследено со командните аргументи, доколку ги има.

КОМАНДНА ИЗВРШНА ОКОЛИНА

Школка има средина за извршување која се состои од следново:

* Отворете ги датотеките наследени од школка при повик, како што е изменето со пренасочувања доставени до exec вградениот

* тековниот работен директориум како што е поставен од cd , pushd , или popd , или наследен од школка при повик

* маска на владата за креирање на датотеки поставена од umask или наследена од родителот на школка

* тековни замки поставени од стапица

* школка параметри кои се поставени со променлива задача или со наместен или наследен од родителот на школка во животната средина

* Школка функции дефинирани за време на извршување или наследени од родителот на школка во животната средина

* Опциите се активирани при повикувањето (или стандардно или со аргументи од командната линија) или со поставување

* опции овозможени од shopt

* школка алијаси дефинирани со алијас

* разни идентификатори на процесот, вклучувајќи ги и оние на задни работни места, вредноста на $$ , и вредноста на $ PPID

Кога едноставна команда, освен вградена или школка, треба да се изврши, таа се повикува во посебна средина за извршување што се состои од следново. Освен ако не е поинаку наведено, вредностите се наследени од школка.

* отворените датотеки на школка, плус какви било измени и дополнувања наведени со пренасочувања на командата

* тековниот работен директориум

* маската за создавање на датотека

* школка променливи означени за извоз, заедно со променливи изнесени за командата, донесени во животната средина

* стапици фатени од страна на школка се ресетираат на вредностите наследени од родителот на школка, и стапици игнорирани од страна на школка се игнорираат

Командата повикана во оваа посебна средина не може да влијае на околината на извршување на школка.

Замена на командата и асинхрони команди се повикуваат во опкружување со подслој кој е дупликат на околината на школка, со исклучок на тоа што стапиците фатени од школката се ресетираат на вредностите што ги наследил нејзината мајка при повикувањето. Вградените команди кои се повикуваат како дел од гасоводот, исто така, се извршуваат во опкружување со подслој. Промените направени во опкружувањето на подслој не можат да влијаат врз животната средина за извршување на школка.

Ако некоја команда е проследена со & & job control не е активна, стандардниот стандарден влез за командата е празната датотека / dev / null . Инаку, повиканата команда ги наследува дескрипторите на датотеката на повикувачката школка како што е изменета со пренасочувања.