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

ИМЕ

Баш - GNU Bourne-Again Шел

Кратък обзор

bash [опции] [файл]

ОПИСАНИЕ

Bash е преводач на компресиран език, който изпълнява команди, четени от стандартния вход или от файл. Баш също така включва полезни функции от короните Korn и C ( ksh и csh ).

Баш е предназначен да бъде в съответствие с изискванията на IEEE POSIX Shell and Tools (IEEE Working Group 1003.2).

НАСТРОИКИ

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

-c низ

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

-i

Ако опцията -i е налице, черупката е интерактивна .

-l

Направете bash като сякаш е била използвана като shell (вж. INVOCATION по-долу).

-r

Ако опцията -r е налице, обвивката става ограничена (вижте RESTRICTED SHELL по-долу).

Ако опцията -s е налице или ако след обработката на опциите няма останали аргументи, тогава командите се четат от стандартния вход. Тази опция позволява да се задават позиционните параметри при извикване на интерактивен корпус.

Списъкът на всички двойки котирани низове, предхождани от $, се отпечатва на стандартния изход. Това са струните, които са предмет на езиков превод, когато текущият локал не е C или POSIX . Това предполага опцията -n ; няма да се изпълняват команди.

[- +] O [ shopt_option ]

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

-

A - сигнализира края на опциите и деактивира допълнителната обработка на опциите. Всички аргументи след - се третират като имена на файлове и аргументи. Аргументът на - е еквивалентен на - .

Баш интерпретира и няколко опции с много знака. Тези опции трябва да се показват в командния ред преди да бъдат разпознати опциите за единичен знак.

--dump-Po-струни

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

--dump-струни

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

--помогне

Показвайте съобщение за използване на стандартния изход и излезте успешно.

- файл с начален файл

- файл с файл

Изпълнявайте командите от файла вместо стандартния личен инициализиращ файл ~ / .bashrc, ако черупката е интерактивна (вижте INVOCATION по-долу).

--Влизам

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

--noediting

Не използвайте GNU readline библиотеката, за да четете командни редове, когато черупката е интерактивна.

--noprofile

Не четете файловете за стартиране в целия системен файл / etc / profile или някой от личните инициализиращи файлове ~ / .bash_profile , ~ / .bash_login или ~ / .profile . По подразбиране bash прочита тези файлове, когато се извиква като shell за вход (вижте INVOCATION по-долу).

--norc

Не четете и изпълнявайте личния инициализиращ файл ~ / .bashrc, ако черупката е интерактивна. Тази опция е включена по подразбиране, ако shell се извика като sh .

--posix

Променете поведението на bash, където стандартната операция се различава от стандарта POSIX 1003.2, за да съответства на стандартния ( posix режим ).

--ограничен

Обвивката се ограничава (вижте ОГРАНИЧЕНА КУТИЯ по-долу).

--rpm-изисква

Да се ​​създаде списъкът на файловете, които са необходими за изпълнение на скрипта на обвивката. Това означава "-n" и е предмет на същите ограничения като проверката за проверка на грешките при компилирането; Тестовете, [] тестовете и изхвърлянията не се анализират, затова някои зависимости може да се пропуснат. --verbose Еквивалент на -v .

--version

Показване на информацията за версията за този случай на bash на стандартния изход и успешно излизане.

АРГУМЕНТИ

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

призоваване

Една команда за вход е тази, чийто първи символ на аргумента нула е - или започва с опцията --login .

Интерактивната черупка е стартирана без аргументи без опция и без опцията -c , чийто стандартен вход и изход са свързани към терминали (както е определено от isatty (3)), или едно започва с опцията -i . PS1 е настроен и $ - включва i, ако bash е интерактивен, което позволява скрипт скрипт или стартов файл за тестване на това състояние.

Следващите параграфи описват как bash изпълнява стартовите си файлове. Ако някой от файловете съществува, но не може да бъде прочетен, bash съобщава за грешка. Tildes се разширяват в имената на файловете, както е описано по-долу в разширението Tilde в раздел EXPANSION.

Когато bash се извиква като интерактивен интерфейс за вход или като не-интерактивен черупки с опцията -login , първо той чете и изпълнява команди от файла / etc / profile , ако съществува такъв файл. След като прочете файла, той търси ~ / .bash_profile , ~ / .bash_login и ~ / .profile в тази последователност и чете и изпълнява команди от първия, който съществува и е четлив. Опцията - noprofile може да се използва, когато корпусът започне да възпрепятства това поведение.

Когато командата за влизане излезе, bash чете и изпълнява команди от файла ~ / .bash_logout , ако съществува.

Когато се стартира интерактивен корпус, който не е входна черупка, bash чете и изпълнява команди от ~ / .bashrc , ако съществува такъв файл. Това може да бъде възпрепятствано с помощта на опцията -norc . Опцията --rcfile file ще принуди bash да чете и изпълнява команди от файл вместо ~ / .bashrc .

Когато баш се стартира неинтерактивно, за да се стартира скрипт на shell, например той търси променливата BASH_ENV в средата, разширява стойността си, ако се появи там и използва разширената стойност като име на файл, за да чете и изпълнява , Bash се държи така, сякаш е изпълнена следната команда:

ако [-n "$ BASH_ENV"]; тогава . "$ BASH_ENV"; Fi

но стойността на променливата PATH не се използва за търсене на името на файла.

Ако bash се извиква с името sh , той се опитва да имитира стартовото поведение на историческите версии на sh, колкото е възможно по-близко, като в същото време отговаря на POSIX стандарта. Когато се извиква като интерактивна входна обвивка или не-интерактивна черупка с опцията -login , тя първо се опитва да чете и изпълнява команди от / etc / profile и ~ / .profile в тази последователност. Опцията - noprofile може да се използва, за да се възпрепятства това поведение. Когато се извиква като интерактивен корпус с името sh , bash търси променливата ENV , разширява стойността си, ако е дефинирана, и използва разширената стойност като име на файл за четене и изпълнение. Тъй като черупка, извикана като sh, не се опитва да чете и изпълнява команди от други стартиращи файлове, опцията --rcfile няма ефект. Не-интерактивен черупки, назовани с името sh, не се опитват да четат други файлове за стартиране. Когато се извиква като sh , bash влиза в режим posix след четенето на стартовите файлове.

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

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

Ако черупката е стартирана с ефективния потребителски (групов) идентификатор, който не е равен на реалния потребителски (групов) идентификатор, а опцията -p не е предоставена, не се четат файлове за стартиране, функциите на shell не се наслеждат от околната среда, SHELLOPTS променлива, ако тя се показва в средата, се игнорира и ефективният потребителски идентификатор е зададен на истинския идентификатор на потребителя. Ако опцията -p се подава при поискване, поведението при стартиране е същото, но ефективният потребителски идентификатор не се нулира.

ДЕФИНИЦИИ

Следните определения се използват в останалата част на този документ.

празно

Пространство или раздел.

дума

Поредица от знаци, разглеждана като единица от черупката. Също известен като знак .

име

Дума, състояща се само от буквено-цифрени знаци и долни черти, започвайки с буквен знак или подсказка. Също така се посочва като идентификатор .

метасимволът

Характер, който, когато е некотиран, разделя думите. Едно от следните неща:

| &; () <> раздел за пространство

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

Знак, който изпълнява контролна функция. Това е един от следните символи:

|| & &&; ;; () | <нов ред>

РЕЗЕРВИРАНИ ДУМИ

Запазените думи са думи, които имат специално значение за черупката. Следните думи се разпознават като запазени, когато са некотирани и първата дума на проста команда (вижте SHELL GRAMMAR по-долу) или третата дума на случай или за команда:

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

SHELL GRAMMAR

Прости команди

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

Връщащата се стойност на простата команда е изходното й състояние или 128+ n, ако командата се прекъсва със сигнал n .

тръбопроводи

Тръбопроводът е последователност от една или повече команди, разделени от символа | , Форматът за тръбопровод е:

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

Стандартният изход на командата е свързан чрез тръба към стандартния вход на команда2 . Тази връзка се осъществява преди всяко пренасочване, посочено от командата (вижте REDIRECTION по-долу).

Ако запазената дума ! предхожда тръбопровод, изходният статус на този тръбопровод е логически НЕ на изходното състояние на последната команда. В противен случай състоянието на тръбопровода е изходното състояние на последната команда. Обвивката чака всички команди в тръбопровода да се прекратят, преди да върнат стойност.

Ако времето, запазена дума, предхожда тръбопровод, изминалото време, както и времето на потребителя и системата, консумирани от неговото изпълнение, се отчитат, когато тръбопроводът се прекратява. Опцията -p променя изходния формат до този, посочен от POSIX. Променливата TIMEFORMAT може да бъде зададена като низ на формат, който определя как да се показва информацията за синхронизиране; вижте описанието на TIMEFORMAT под Променливите за Shell по-долу.

Всяка команда в даден тръбопровод се изпълнява като отделен процес (т.е. в подклас).

списъци

Списъкът е поредица от едно или повече тръбопроводи, разделени от един от операторите ; , & , && , или || , и евентуално завършва с един от ; , & , или .

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

В списъка може да се появи последователност от един или повече нови реда, вместо от точка и запетая, за да се делимират командите.

Ако командата се прекъсне от контролния оператор & , черупката изпълнява командата във фонов режим в подвъзела. Обвивката не чака командата да завърши и състоянието на връщане е 0. Команди, разделени от a ; се изпълняват последователно; черупката чака всяка команда да завърши на свой ред. Състоянието на връщане е изходното състояние на последната изпълнена команда.

Контролните оператори && и || означават съответно списъците и OR списъци. Списъкът AND има формуляра

command1 && command2

command2 се изпълнява, ако и само ако command1 връща изходно състояние от нула.

Списък с ОР има формуляра

command1 || command2

command2 се изпълнява, ако и само ако команда1 връща ненулевото състояние на излизане. Състоянието на връщане на списъците AND и OR е изходното състояние на последната команда, изпълнена в списъка.

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

Комбинираната команда е една от следните:

( списък )

списъкът се изпълнява в подклас. Променливите задачи и вградените команди, които влияят върху средата на обвивката, не остават в сила, след като командата завърши. Състоянието на връщане е изходното състояние на списъка .

{ list ; }

списъкът се изпълнява просто в текущата среда на обвивката. списъкът трябва да бъде прекратен с нов ред или точка и запетая. Това е известно като групова команда . Състоянието на връщане е изходното състояние на списъка . Обърнете внимание, че за разлика от метахаркарите ( и ) , { и } са резервирани думи и трябва да се появят, когато запазената дума е разрешена да бъде разпозната. Тъй като те не причиняват думата, те трябва да бъдат отделени от списъка с бели полета.

(( израз ))

Изразът се оценява съгласно правилата, описани по-долу в ARITHMETIC EVALUATION . Ако стойността на израза е ненулева, състоянието на връщането е 0; в противен случай статутът на връщане е 1. Това е точно еквивалентно на " израз ".

[[ израз ]]

Връщане на статус 0 или 1 в зависимост от оценката на израза за условен израз . Изразите се състоят от първичните описания, описани по-долу в " УСЛОВНИ ИЗРАЗЕНИЯ" . Разширяването на думите и разширението на пътя не се изпълняват по думите между [[ и ]] ; разширяването на тилда, параметър и променлива експанзия, аритметично разширение, заместване на командата, заместване на процеса и отстраняване на котировки.

Когато се използват операторите == и ! = , Низът отдясно на оператора се счита за шаблон и се съгласува съгласно правилата, описани по-долу в " Подреждане на шаблони" . Стойността на връщането е 0, ако низът съвпада или не съответства на шаблона съответно и 1 по друг начин. Всяка част от шаблона може да бъде цитирана, за да бъде принудена да бъде съчетана като низ.

Изразите могат да се комбинират, като се използват следните оператори, изброени в низходящ ред:

( израз )

Връща стойността на израз . Това може да се използва за преодоляване на нормалното предимство на операторите.

! изразяване

Вярно, ако изразът е невярно.

expression1 && expression2

Вярно, ако и expression1, и expression2 са верни.

израз1 || expression2 Вярно, ако или expression1 или expression2 са верни.

В && и || операторите не оценяват израз2, ако стойността на израз1 е достатъчна, за да се определи възвръщаемата стойност на целия условен израз.

за име [ в дума ]; направи списък ; Свършен

Списъкът на думите, които следват, се разширява и генерира списък с елементи. Името на променливата се задава на всеки елемент от този списък на свой ред и списъкът се изпълнява всеки път. Ако липсва в дума , командата за изпълнява списък веднъж за всеки позиционен параметър, който е зададен (вижте ПАРАМЕТРИТЕ по-долу). Състоянието на връщане е изходното състояние на последната команда, която изпълнява. Ако разширението на елементите, които следват в резултат в празен списък, не се изпълняват команди и състоянието на връщане е 0.

за (( expr1 ; expr2 ; expr3 )); направи списък ; Свършен

Първо, аритметичната експресия expr1 се оценява съгласно правилата, описани по-долу в ARITHMETIC EVALUATION . След това аритметичната експресия expr2 се оценява многократно, докато се оцени до нула. Всеки път, когато expr2 се оценява на ненулева стойност, се изпълнява списък и се оценява аритметичната експресия. Ако някой извод е пропуснат, той се държи, сякаш го оценява на 1. Връщащата се стойност е изходното състояние на последната команда в списъка, която се изпълнява, или невярно, ако някой от изразите е невалиден.

изберете име [ в дума ]; направи списък ; Свършен

Списъкът на думите, които следват, се разширява и генерира списък с елементи. Наборът от разширени думи се отпечатва върху стандартната грешка, всяка от която е предшествана от число. Ако липсва в дума , позиционираните параметри се отпечатват (вижте ПАРАМЕТРИТЕ по-долу). След това се показва прозорецът за PS3 и се чете линия от стандартния вход. Ако редът се състои от число, съответстващо на една от изписаните думи, тогава стойността на името е зададена на тази дума. Ако линията е празна, думите и подканата се показват отново. Ако се прочете EOF, командата завършва. Всяка друга стойност за четене води до задаване на име на нула. Прочетената линия се записва в променливата REPLY . Списъкът се изпълнява след всеки избор, докато се изпълни командата за прекъсване . Изходното състояние на select е изходното състояние на последната команда, изпълнена в списъка , или нула, ако не са изпълнени команди.

случай дума в [[(] модел [ | модел ]

Най-напред командата за случай разширява думата и се опитва да я сравнява с всеки модел на свой ред, като използва същите правила за съвпадение с разширението на пътя (вижте Разширяване на пътя по-долу). Когато се намери съвпадение, се изпълнява съответният списък . След първия мач не се правят опити за следващи мачове. Изходното състояние е нула, ако не съвпада модел. В противен случай това е изходното състояние на последната команда, изпълнена в списъка .

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

Списъкът if се изпълнява. Ако изходното му състояние е нула, то тогава се изпълнява списъкът . В противен случай всеки списък elif се изпълнява на свой ред и ако изходното му състояние е нула, тогава съответният списък се изпълнява и командата завършва. В противен случай списъкът else се изпълнява, ако има такъв. Изходното състояние е изходното състояние на последната изпълнена команда или нула, ако не е проверено вярно условие.

докато в списъка ; направи списък ; Свършен

до списъка ; направи списък ; Свършен

Командата while продължава да изпълнява списъка със задачи , докато последната команда в списъка връща изходно състояние от нула. Командата until е идентична на командата while , с изключение на това, че тестът е отхвърлен; списъкът със задачи се изпълнява, докато последната команда в списъка връща ненулевото състояние на излизане. Изходното състояние на времето до команди е изходното състояние на последната изпълнена команда или нула, ако никой не е изпълнен.

[ функция ] име () { списък ; }

Това определя функция, наречена име . Тялото на функцията е списък с команди между {и}. Този списък се изпълнява винаги, когато името е посочено като име на проста команда. Изходното състояние на функция е изходното състояние на последната команда, изпълнена в тялото. (Вижте ФУНКЦИИ по-долу.)

КОМЕНТАРИ

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

цитирайки

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

Всеки от метахарактарите, изброени по-горе под DEFINITIONS, има специално значение за черупката и трябва да бъде цитиран, ако се представя.

Когато се използват съоръженията за разширяване на командната история, обикновено характерът за разширяване на историята ! , трябва да бъдат цитирани, за да се предотврати разширяването на историята.

Има три цитативни механизма: евакуационния характер , единичните кавички и двойните кавички.

Неизвестно обратно наклонена черта ( \ ) е символът за евакуация . Запазва буквалната стойност на следващия символ, който следва, с изключение на . Ако се появи двойка \ и обратната наклонена черта не се цитира, \ се третира като продължение на линията (т.е. тя се премахва от входния поток и ефективно се игнорира).

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

Затварянето на знаците в двойни кавички запазва буквалната стойност на всички знаци в кавичките, с изключение на $ , ` и \ . Героите $ и " запазват своето специално значение в рамките на двойни кавички. Обратното наклонена черта запазва специалното си значение само ако е последван от един от следните символи: $ , ` , ' , \ или . В двойните цитати може да се цитира двоен цитат, като се предхожда с обратна наклонена черта.

Специалните параметри * и @ имат специално значение, когато са в двойни кавички (вижте параметрите по-долу).

Думите от формуляра $ ' string ' се третират специално. Думата се разширява до низ , като знаците, избягнати от обратна наклонена черта, се заместват, както е определено от стандарта ANSI C. Секвенциите за избягване на наклона, ако има такива, се декодират, както следва:

\ а

сигнал (звънец)

\ б

Backspace

\ д

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

\ е

форма фураж

\ Н

нова линия

\ R

връщане на карето

\T

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

\ о

вертикален раздел

\\

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

\ '

един цитат

\ nnn

8-битовият знак, чиято стойност е осмичната стойност nnn (една до три цифри)

\ х НН

осем-битовият знак, чиято стойност е шестнадесетичната стойност HH (една или две шестнадесетични цифри)

\ c x

контролен символ

Разширеният резултат е еднократно цитиран, сякаш знакът на долара не е бил налице.

Двойно цитиран низ, предхождан от знак за долар ( $ ), ще доведе до превод на низа според текущия локал. Ако текущият локал е C или POSIX , знакът за долара се игнорира. Ако низът е преведен и заменен, замяната е двойно цитирана.

ПАРАМЕТРИ

Параметърът е обект, който съхранява стойности. Това може да е име , номер или специален символ, изброени по-долу, в Специални параметри . За целите на обвивката променлива е параметър, означен с име . Променливата има стойност и нула или повече атрибути . Атрибутите се задават чрез деклариране на вградената команда (вижте деклариране по-долу в SHELL BUILTIN COMMANDS).

Параметърът се задава, ако му е присвоена стойност. Нулевият низ е валидна стойност. След като веднъж е зададена променлива, тя може да бъде деактивирана само с помощта на командата unset builtin (виж SHELL BUILTIN COMMANDS по-долу).

Променливата може да бъде зададена чрез изявление на формуляра

име = [ стойност ]

Ако стойността не е дадена, променливата се определя като нула низ. Всички стойности се подлагат на разширение на tilde, параметър и променлива експанзия, подмяна на команди, аритметично разширение и отстраняване на котировки (виж EXPANSION по-долу). Ако променливата има цял атрибут, тогава стойността се подлага на аритметично разширение, дори ако разширението $ ((...)) не се използва (вижте Аритметично разширение по-долу). Разделянето на думи не се изпълнява, с изключение на "$ @", както е обяснено по-долу в Специални параметри . Разширението на пътя не се изпълнява. Извлеченията за задаване могат да се показват като аргументи за заявените команди за деклариране , подреждане , експортиране , readonly и локално вграждане.

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

Позиционалният параметър е параметър, обозначен с една или повече цифри, различни от единичната цифра. Позициите се задават от аргументите на обвивката, когато се извикват и могат да бъдат преразпределени чрез настроената вградена команда. Позиционните параметри може да не се присвояват с отчети за присвояване. Параметрите на позицията временно се заместват, когато се изпълни функцията на черупки (вижте ФУНКЦИИ по-долу).

Когато позиционният параметър, състоящ се от повече от една цифра, се разширява, той трябва да бъде затворен в скоби (вижте EXPANSION по-долу).

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

Обвивката обработва няколко параметъра специално. Тези параметри могат да се посочват само; възлагането им не е разрешено.

*

Разширява до позиционните параметри, като се започне от една. Когато разширението се осъществява в рамките на двойни кавички, то се разширява до една дума със стойността на всеки параметър, разделен от първия знак на специалната променлива IFS . Това означава, че " $ * " е еквивалентно на " $ 1 c $ 2 c ... ", където c е първият знак на стойността на променливата IFS . Ако IFS е деактивиран, параметрите са разделени от интервали. Ако IFS е нула, параметрите се свързват без намеса на сепараторите.

@

Разширява до позиционните параметри, като се започне от една. Когато разширението се осъществи в рамките на двойни кавички, всеки параметър се разширява до отделна дума. Това означава, че " $ @ " е еквивалентно на " $ 1 " " $ 2 " ... Когато няма позиционни параметри, " $ @ " и $ @ се разширяват до нищо (т.е.

#

Разширява до броя позиционни параметри в десетичната.

?

Разширява до състоянието на най-скоро изпълнения тръбопровод за преден план.

-

Разширява до текущите опции флаговете, както е указано при призоваване, чрез настроената вградена команда или тези, зададени от самата обвивка (като опцията -i ).

$

Разширява до идентификатора на процеса на обвивката. В subshell (), тя се разширява до идентификатора на процеса на текущата обвивка, а не на subshell.

!

Разширява до идентификационния процес на последната команда на фона (асинхронно).

0

Разширява до името на скрипта за shell или shell. Това е зададено при инициализация на черупки. Ако bash се извиква с файл с команди, $ 0 се задава на името на този файл. Ако bash се стартира с опцията -c , тогава $ 0 се задава на първия аргумент, след като низът да бъде изпълнен, ако има такъв. В противен случай тя е зададена на името на файла, използвано за извикване на bash , както е дадено от аргумента нула.

_

При стартиране на shell, задайте абсолютно име на файла на shell или shell shell, който се изпълнява като преминали в списъка с аргументи. След това се разширява до последния аргумент към предишната команда след разширяване. Също така задайте пълното име на всяка команда, изпълнена и поставена в средата, експортирана до тази команда. Когато проверявате пощата, този параметър съдържа името на текущо проверявания файл.

Променливи на Shell

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

БАШ

Разширява до пълното име на файла, използвано за извикване на този пример за bash .

BASH_VERSINFO

Променлива за четене на масив, чиито членове притежават информация за версията за този пример за bash . Стойностите, зададени за елементите на масива, са както следва:

BASH_VERSINFO [ 0]

Основният номер на версията ( освобождаването ).

BASH_VERSINFO [ 1]

Малкият номер на версията ( версията ).

BASH_VERSINFO [ 2]

Нивото на кръпка.

BASH_VERSINFO [ 3]

Изградената версия.

BASH_VERSINFO [ 4]

Състоянието на освобождаването (напр. Бета1 ).

BASH_VERSINFO [ 5]

Стойността на MACHTYPE .

BASH_VERSION

Разширява се до низ, описващ версията на този пример за bash .

COMP_CWORD

COMP_LINE

Текущият команден ред. Тази променлива е налична само в функции на черупки и външни команди, извикани от програмиращите се устройства за завършване (вижте Програмируемото изпълнение по-долу).

COMP_POINT

COMP_WORDS

Променлива на масива (вижте Поредици по-долу), състоящи се от отделните думи в текущия команден ред. Тази променлива е достъпна само в функции на черупки, които се извикват от програмиращите се устройства за завършване (вижте Програмируемото изпълнение по-долу).

DIRSTACK

Променлива на масива (вижте Поредици по-долу), съдържащи текущото съдържание на пакета с директории. Директории се появяват в стека в реда, в който се показват от вградения вграден файл. Присвояването на членове на този масив може да се използва за променяне на директории, които вече са в стека, но вградените вложки pushdrop и popd трябва да се използват за добавяне и премахване на директории. Присвояването на тази променлива няма да промени текущата директория. Ако DIRSTACK е деактивиран , той губи своите специални свойства, дори ако впоследствие бъде нулиран.

EUID

Разширява до ефективния потребителски идентификатор на текущия потребител, инициализиран при стартиране на shell. Тази променлива е readonly.

FUNCNAME

Името на която и да е изпълняваща черупка функция. Тази променлива съществува само когато изпълнява функция на черупки. Заданията на FUNCNAME нямат ефект и връщат състояние на грешка. Ако FUNCNAME е деактивиран , той губи своите специални свойства, дори ако впоследствие бъде нулиран.

ГРУПИ

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

HISTCMD

Номерът на историята или индексът в списъка с история на текущата команда. Ако HISTCMD е деактивиран , той губи своите специални свойства, дори ако впоследствие бъде нулиран.

HOSTNAME

Автоматично задаване на името на текущия хост.

HOSTTYPE

Автоматично задайте низ, който уникално описва типа на машината, на която се изпълнява бас . Стандартната настройка е зависима от системата.

LINENO

Всеки път, когато този параметър е посочен, черупката замества десетично число, представляващо текущия последователен номер на линия (започващ от 1) в скрипт или функция. Когато не е в скрипт или функция, заместената стойност не е гарантирана, че има смисъл. Ако LINENO е деактивиран , той губи своите специални свойства, дори ако впоследствие бъде нулиран.

MACHTYPE

Автоматично настроен на низ, който напълно описва типа на системата, на който се изпълнява баш , в стандартен формат на GNU процесора-фирмена система . Стандартната настройка е зависима от системата.

OLDPWD

Предишната работна директория, зададена от командата cd .

OPTARG

Стойността на аргумента от последната опция, обработена от вградената команда getopts (виж SHELL BUILTIN COMMANDS по-долу).

$ OPTIND

Индексът на следващия аргумент се обработва от вградената команда getopts (виж SHELL BUILTIN COMMANDS по-долу).

OSTYPE

Автоматично задаване на низ, който описва операционната система, на която се изпълнява бас . Стандартната настройка е зависима от системата.

PIPESTATUS

Променлива на масива (вижте Поредици по-долу), съдържаща списък със стойности за статуса на изход от процесите в най-скоро изпълнения тръбопровод за преден план (който може да съдържа само една команда).

PPID

Идентификационният номер на процеса на родителя на обвивката. Тази променлива е readonly.

хората с увреждания

Текущата работна директория, зададена от командата cd .

СЛУЧАЙНА

Всеки път, когато този параметър е посочен, се генерира случайно цяло число между 0 и 32767. Последователността на случайните номера може да бъде инициализирана чрез задаване на стойност на RANDOM . Ако RANDOM е изключен, той губи своите специални свойства, дори ако впоследствие бъде нулиран.

ОТГОВОР

Задайте на линията на входа, прочетена от прочетената вградена команда, когато няма предоставени аргументи.

СЕКУНДИ

Всеки път, когато този параметър е посочен, броят секунди от връщането на обвивката на черупки. Ако една стойност е присвоена на SECONDS , стойността, която се връща при последващи препратки, е броят секунди от присвояването плюс присвоената стойност. Ако SECONDS е деактивиран, той губи своите специални свойства, дори ако впоследствие бъде нулиран.

SHELLOPTS

Списък с разделени от колона опции на обвивката. Всяка дума в списъка е валиден аргумент за опцията -o към настроената вградена команда (вижте SHELL BUILTIN COMMANDS по-долу). Опциите, които се появяват в SHELLOPTS, са онези, които са отчетени като включени от set -o . Ако тази променлива е в средата при стартиране на bash , всяка черупка в списъка ще бъде активирана, преди да прочетете всички стартиращи файлове. Тази променлива е само за четене.

SHLVL

Увеличава се с по един всеки път, когато се стартира баш .

UID

Разширява се до потребителския идентификационен номер на текущия потребител, инициализиран при стартиране на shell. Тази променлива е readonly.

Следните променливи се използват от черупката. В някои случаи bash присвоява стойност по подразбиране на променлива; тези случаи са отбелязани по-долу.

BASH_ENV

Ако този параметър е зададен, когато bash изпълнява скрипт на shell, неговата стойност се интерпретира като име на файл, съдържащо команди за инициализиране на shell, както в ~ / .bashrc . Стойността на BASH_ENV е подложена на разширяване на параметъра, заместване на команди и аритметично разширение, преди да бъде интерпретирано като име на файл. PATH не се използва за търсене на полученото име на файла.

CDPATH

Пътят за търсене на командата cd . Това е списък с директории, разделен на двоеточие, в който корпусът търси директории за дестинация, определени от командата cd . Стойността на извадката е ".: ~: / Usr".

КОЛОНИ

Използва се чрез вградената вградена команда за определяне на ширината на терминала при отпечатване на списъците за избор. Автоматично настройване при получаване на SIGWINCH.

COMPREPLY

Променлива на масива, от която bash чете възможните завършвания, генерирани от функцията черупка, извикана от програмата за програмиране (виж Програмируемо завършване по-долу).

FCEDIT

Редакторът по подразбиране за командата fc вградена.

FIGNORE

Списък със суфикси, разделен на двоеточие, който да се игнорира, когато се изпълнява име на файл (вижте READLINE по-долу). Името на файла, чието наставка съвпада с едно от вписванията в FIGNORE, е изключено от списъка на съвпадащите имена на файлове. Стойността на пробата е ".o: ~".

GLOBIGNORE

Списък с шаблони, разделен на дебелина, определящ набор от имена на файлове, които да бъдат игнорирани чрез разширяване на пътя. Ако име на файл, съвпадащо с модел за разширение на пътя, съвпада и с един от моделите в GLOBIGNORE , той се премахва от списъка с съвпадения.

HISTCONTROL

Ако е зададена стойност на ignorespace , линиите, които започват с интервал , не се въвеждат в списъка с истории. Ако е зададена стойност на ignoredups , не се въвеждат линии, съответстващи на последната линия на историята. Стойността на ignoreboth комбинира двата варианта. Ако се дезактивира или е зададена стойност, различна от посочената по-горе, всички линии, четени от анализатора, се записват в списъка с история, в зависимост от стойността на HISTIGNORE . Функцията на тази променлива е заменена от HISTIGNORE . Втората и следващите редове на многоредова комбинирана команда не се тестват и се добавят към историята независимо от стойността на HISTCONTROL .

HISTFILE

Името на файла, в който е съхранена историята на командите (вижте ИСТОРИЯ по-долу). Стойността по подразбиране е ~ / .bash_history . Ако е деактивирано, историята на командите не се запазва, когато излезе интерактивен корпус.

HISTFILESIZE

Максималният брой линии, съдържащи се в историческия файл. Когато на тази променлива е присвоена стойност, файлът на историята се съкращава, ако е необходимо, да съдържа не повече от този брой линии. Стойността по подразбиране е 500. Историческият файл също е съкратен до този размер след писането му, когато излезе интерактивен корпус.

HISTIGNORE

Списък с модели, разделени от колона, използван за определяне на кои командни редове да се запазват в списъка с истории. Всеки шаблон е закотвен в началото на линията и трябва да съвпада с пълната линия (не е включен имплицитен " * "). Всеки образец се тества срещу линията, след като се прилагат проверките, посочени от HISTCONTROL . В допълнение към символите, съвпадащи с нормалните шаблони, " & " съвпада с предишната линия на историята. " & " може да бъде избегнато с обратна наклонена черта; обратно наклонена черта е отстранена, преди да се опитате да направите мач. Втората и следващите редове на многоредова комбинирана команда не се тестват и се добавят към историята независимо от стойността на HISTIGNORE .

HISTSIZE

Броят команди, които трябва да запомните в историята на командите (вижте ИСТОРИЯ по-долу). Стойността по подразбиране е 500.

У ДОМА

Началната директория на текущия потребител; аргументът по подразбиране за командата cd вградена. Стойността на тази променлива също се използва, когато се извършва експанзия на tilde.

HOSTFILE

Съдържа името на файл в същия формат като / etc / hosts, които трябва да се четат, когато черупката трябва да завърши име на хост. Списъкът с възможни завършвания на име на хост може да се промени, докато черупката се изпълнява; следващото приключване на хоста на хоста след опит за промяна на стойността, bash добавя съдържанието на новия файл към съществуващия списък. Ако HOSTFILE е настроен, но няма стойност, баш се опитва да прочете / etc / hosts, за да получи списък с възможни завършвания на име на хост. Когато HOSTFILE е деактивиран , списъкът с име на хост се изчиства.

IFS

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

IGNOREEOF

Контролира действието на интерактивна черупка при получаване на символ на EOF като единствен вход. Ако е зададена, стойността е броят на последователните EOF знаци, които трябва да бъдат въведени като първите знаци на входния ред преди излизането на bash . Ако променливата съществува, но няма цифрова стойност или няма стойност, стойността по подразбиране е 10. Ако тя не съществува, EOF означава края на входа към обвивката.

INPUTRC

Името на файла за стартовия файл за четене, заменящо по подразбиране ~ / .inputrc (вижте READLINE по-долу).

LANG

Използва се за определяне на локалната категория за всяка категория, която не е специално избрана с променлива, започваща с LC_ .

LC_ALL

Тази променлива отменя стойността на LANG и всяка друга променлива LC_, която указва локална категория.

LC_COLLATE

Тази променлива определя колационната последователност, използвана при сортиране на резултатите от разширението на пътя, и определя поведението на изразите на обхвата, класовете на еквивалентност и последователностите на сортиране в рамките на разширението на пътя и съвпадението на шаблони.

LC_CTYPE

Тази променлива определя интерпретацията на знаците и поведението на класовете знаци в разширението на пътя и съвпадането на шаблони.

LC_MESSAGES

Тази променлива определя локала, използван за преобразуване на двойно цитирани низове, предхождани от $ .

LC_NUMERIC

Тази променлива определя локалната категория, използвана за форматиране на числа.

ЛИНИИ

Използва се от избраната вградена команда за определяне на дължината на колоната за отпечатване на списъците за избор. Автоматично настройване при получаване на SIGWINCH.

MAIL

Ако този параметър е настроен на име на файл и променливата MAILPATH не е зададена, bash информира потребителя за пристигането на поща в посочения файл.

променливата не е

Посочва колко често (в секунди) се извършват проверки за поща. Стандартът е 60 секунди. Когато е време да се провери за поща, черупката го прави, преди да покаже основния промпт. Ако тази променлива е деактивирана или е настроена на стойност, която не е число по-голямо или равно на нула, обвивката деактивира проверката на пощата.

MAILPATH

Списък с имена на файлове, разделени с колони, които да се проверяват за поща. Съобщението, което трябва да бъде отпечатано при пристигането на поща в определен файл, може да бъде зададено чрез разделянето на името на файла от съобщението с "?". Когато се използва в текста на съобщението, $ _ се разширява до името на текущия пощенски файл. Пример:

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

Баш доставя стойност по подразбиране за тази променлива, но местоположението на потребителските пощенски файлове, които използва, е зависимо от системата (напр. / Var / mail / $ USER ).

$ OPTERR

Ако е зададена стойност 1, bash показва съобщенията за грешки, генерирани от вградената команда getopts (виж SHELL BUILTIN COMMANDS по-долу). OPTERR се инициализира до 1 всеки път, когато се извика черупката или се изпълни скрипт на shell.

PATH

Пътят за търсене на команди. Това е списък с директории, разделен на двоеточие, в който черупката търси команди (вижте COMMAND EXECUTION по-долу). Пътят по подразбиране зависи от системата и се определя от администратора, който инсталира баш . Общата стойност е `` / usr / gnu / bin: / usr / local / bin: / usr / ucb: / bin: / usr / bin:.

POSIXLY_CORRECT

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

PROMPT_COMMAND

Ако е зададена, стойността се изпълнява като команда преди издаването на всеки основен промпт.

PS1

Стойността на този параметър е разширена (вижте по-долу) и се използва като основен низ за промпт. Стойността по подразбиране е `` \ s- \ v \ $ ''.

PS2

Стойността на този параметър се разширява както при PS1 и се използва като вторичен низ за промпт. По подразбиране е `` > ''.

PS3

Стойността на този параметър се използва като подкана за командата select (виж SHELL GRAMMAR по-горе).

PS4

Стойността на този параметър се разширява както при PS1, а стойността се отпечатва преди всяко показване на командата по време на изпълнение на проследяването. Първият знак на PS4 се репликира няколко пъти, ако е необходимо, за да се посочат няколко нива на индирекция. По подразбиране е " + ".

ВРЕМЕВИ ФОРМАТ

Стойността на този параметър се използва като форматен низ, който указва как трябва да се показва информацията за синхронизация за тръбопроводите, предварително обозначени с думата, запазена във времето . Знакът % въвежда последователност на евакуация, която се разширява до стойност на времето или друга информация. Последователностите на бягството и техните значения са както следва; скобите означават незадължителни части.

%%

Буквално % .

% [ p ] [1] R

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

% [ p ] [1] U

Броят секунди на CPU, прекарани в потребителския режим.

% [ p ] [1] S

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

% P

Процентът CPU, изчислен като (% 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 се третира като стандартно време за изчакване за вградения пробен. Командата за избиране се прекратява, ако входящият сигнал не пристига след секунди, когато входящият сигнал идва от терминал. В интерактивен корпус, стойността се интерпретира като броят на секундите, които чакат за въвеждане след издаването на основния промпт. Баш завършва, след като чака този брой секунди, ако входът не пристигне.

auto_resume

Тази променлива контролира взаимодействието на черупката с потребителя и контрола на задачите. Ако тази променлива е зададена, простите команди на една дума без пренасочване се третират като кандидати за възобновяване на съществуваща задача, спряна. Не се допуска двусмислие; ако има повече от една задача, започваща с въведен низ, се избира последната достъпна задача. Името на спряно задание в този контекст е командния ред, използван за стартирането му. Ако е зададена точната стойност, предоставеният низ трябва точно да съвпада с името на спряната задача; ако е зададено да подразделение , предоставеният низ трябва да съответства на подразбиращ се елемент от името на спряно задание. Стойността на подразделението осигурява функционалност, аналогична на %? идентификатор на длъжността (вижте JOB CONTROL по-долу). Ако е настроена на някаква друга стойност, предоставеният низ трябва да е префикс на името на спряната задача; това осигурява функция, аналогична на % идентификатор на заданието.

histchars

Два или три знака, които контролират разширяването на историята и токенизацията (вижте разгънатия по-долу ИСТОРИЯ ). Първият символ е символът за разширяване на историята, знакът, който сигнализира за началото на разширяването на историята, обикновено ` ! ". Вторият знак е бързият заместващ знак, който се използва като стенограф за повторно пускане на въведената команда, замествайки в командата един низ за друг. По подразбиране е " ^ ". Третият незадължителен символ е знакът, който показва, че останалата част от реда е коментар, когато е намерен като първи знак на дума, обикновено " # ". Кодовият знак за историята причинява заместване на историята с останалите думи на линията. Това не е задължително да накара анализатора на черупки да третира останалата част от реда като коментар.

Масивите

Bash осигурява едномерни масивни променливи. Всяка променлива може да се използва като масив; декларираното вградено ще обяви изрично масив. Няма максимална граница за размера на масив, нито изискване членовете да бъдат индексирани или присвоени последователно. Масивите са индексирани с числа и са базирани на нула.

Масивът се създава автоматично, ако всяка променлива е присвоена да използва името на синтаксиса [ индекс ] = стойност . Индексът се третира като аритметичен израз, който трябва да се оцени до число по-голямо или равно на нула. За да декларирате изрично масив, използвайте декларирайте - име (вижте SHELL BUILTIN COMMANDS по-долу). декларираме - име [ индекс ] също се приема; индексът се игнорира. Атрибутите могат да бъдат зададени за променлива на масива, използвайки декларираните и readonly builtins. Всеки атрибут се отнася за всички членове на масив.

Arrays са присвоени към използване на комбинирани присвоявания на формуляра name = ( стойност 1 ... стойност n ) , където всяка стойност е от формата [ subscript ] = низ . Необходим е само низ . Ако се доставят незадължителните скоби и индексът, към който е присвоен този индекс; в противен случай индексът на присвоения елемент е последният индекс, определен от оператора, плюс един. Индексирането започва от нула. Този синтаксис също се приема от декларирания вграден. Индивидуалните елементи на масив могат да бъдат присвоени на използването на името [ subscript ] = синтаксис на стойността, въведен по-горе.

Неизключеният вграден се използва за унищожаване на масиви. unset име [ индекс ] разрушава елемента на масива в индекс индекс. дефинирай името , където името е масив, или unset име [ индекс ], където индексът е * или @ , премахва целия масив.

Деклариращите , локални и readonly вградени всеки приемат -a опция за определяне на масив. Прочетеното вградено устройство приема опция -а, за да присвои списък от думи, четени от стандартния вход в масив. Настройката и декларирането на вградените стойности на масива на дисплея по начин, който им позволява да бъдат използвани повторно като задания.

РАЗШИРЯВАНЕ

Разширяването се извършва на командния ред след разделянето му на думи. Съществуват седем вида разширения: експанзия на скоби, разширение на tilde , параметър и променлива разширение , заместване на команди , аритметично разширение , разделяне на думите и разширяване на пътя .

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

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

Разширяване на скобата

Разширението на скобата е механизъм, чрез който могат да се генерират произволни струни. Този механизъм е подобен на разширението на пътя , но генерираните имена на файлове не е необходимо да съществуват. Моделите, подлежащи на разширяване на формата, имат формата на незадължителна преамбюла , последвана от серия от струни, разделени със запетая, между двойка скоби, последвани от посткрипт . Преамбюлът е префикс на всеки низ, съдържащ се в скобите, а послеписът се прибавя към всеки получен низ, като се разширява от ляво на дясно.

Разширенията на скобите могат да бъдат вложени. Резултатите от всеки разширен низ не са сортирани; отляво надясно се запазва. Например, { d, c, b } се разширява в "ade ace abe".

Разширението на скобата се извършва преди всяко друго разширение, а в резултата се запазват символите, които са специални за други разширения. Тя е строго текстова. Баш не прилага никаква синтактична интерпретация в контекста на разширението или текста между скобите.

Тази конструкция обикновено се използва като стенограф, когато общият префикс на струните, които ще бъдат генерирани, е по-дълъг от този в горния пример:

mkdir / usr / local / src / bash / {стари, нови, dist, бъгове}

или

корен на chown /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

Разширението на Brace въвежда леко несъвместимост с историческите версии на sh . Ш не третира отвори или затварящи скоби, особено когато се появяват като част от думата, и ги запазва в изхода. Баш премахва скобите от думите като последица от разширяването на опорите. Например, една дума, въведена в sh като файл {1,2}, се появява идентично на изхода. Същата дума се извежда като file1 file2 след разширяване от bash . Ако се изисква стриктна съвместимост с sh , стартирайте bash с опцията + B или деактивирайте разширението на скобата с опцията + B към командата set (вижте SHELL BUILTIN COMMANDS по-долу).

Разширяване на Tilde

Ако дадена дума започва с некотиран символ на тилда (` ~ '), всички символи, предхождащи първата некотирана наклонена черта (или всички знаци, ако няма некотирана наклонена черта), се считат за префикс tilde . Ако не е цитиран нито един от символите в префикс tilde, символите в префикс tilde, следващи tilda, се разглеждат като възможно име за вход . Ако това потребителско име е нулев низ, tilda се заменя със стойността на параметъра HOME . Ако функцията HOME е деактивирана, вместо това се замества началната директория на потребителя, изпълняваща обвивката. В противен случай префиксът tilde се заменя с началната директория, свързана с посоченото име за вход.

Ако префиксът tilde е "~ +", стойността на променливата PWD на обвивката замества префиксът tilde. Ако префиксът tilde е "~ -", стойността на променливата на обвивката OLDPWD , ако е зададена, се замества. Ако символите, които следват tilda в префикса tilde, се състоят от число N , по избор, префиксирано от "+" или "-", префиксът tilde се заменя със съответния елемент от пакета с директории, тъй като ще се показва от dir вградения, използван като prefix като аргумент. Ако символите, следващи tilda в префикса tilde, се състоят от число, без водещи "+" или "-", "+" се приема.

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

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

Разширяване на параметрите

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

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

Стойността на параметъра е заменена. Щифтовете се изискват, когато параметърът е позиционен параметър с повече от една цифра или когато параметърът е последван от знак, който не трябва да се интерпретира като част от неговото име.

Във всеки от случаите по-долу думата е обект на разширение на tilde, разширение на параметъра, замяна на команда и аритметично разширение. Когато не се изпълнява разширяването на подразделение, тестовете за баш за параметър, който е деактивиран или нулев; пропускането на дебелото черво води до тест само за параметър, който е деактивиран.

Използвайте стойностите по подразбиране . Ако параметърът е неактивен или нулев, разширението на думата се заменя. В противен случай стойността на параметъра се замества.

Присвояване на стандартните стойности . Ако параметърът е деактивиран или нулев, разширението на думата се присвоява на параметър . След това се замества стойността на параметъра . По този начин параметрите на позицията и специалните параметри не могат да бъдат присвоени.

Грешка при показване, ако е нула или не е зададена . Ако параметърът е null или не е деактивиран, разширението на думата (или съобщение за това, ако думата не е налице) се записва в стандартната грешка, а черупката, ако не е интерактивна, излиза. В противен случай стойността на параметъра се замества.

Използвайте алтернативна стойност . Ако параметърът е null или не е дефиниран, нищо не се замества, в противен случай разширяването на думата се заменя.

Разширява до имената на променливи, чиито имена започват с префикс , разделени от първия знак на специалната променлива IFS .

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

Думата се разширява, за да създаде шаблон точно както при разширението на пътя. Ако шаблонът съвпада с началото на стойността на параметъра , резултатът от разширението е разширената стойност на параметъра с най-късия съвпадащ модел (случай " # ") или най-дългия шаблон за съвпадение (" ## " "случай) е изтрит. Ако параметърът е @ или * , операцията за премахване на шаблона се прилага за всеки позиционен параметър на свой ред, а разширението е резултантният списък. Ако параметърът е масивна променлива, записана с @ или * , операцията за премахване на шаблони се прилага за всеки член на масива от своя страна, а разширението е резултантният списък.

Думата се разширява, за да създаде шаблон точно както при разширението на пътя. Ако шаблонът съвпада с последователна част от разширената стойност на параметъра , резултатът от разширението е разширената стойност на параметъра с най-късия шаблон за съвпадение (случая " % ") или най-дългия шаблон за съвпадение (" %" % ''). Ако параметърът е @ или * , операцията за премахване на шаблона се прилага за всеки позиционен параметър на свой ред, а разширението е резултантният списък. Ако параметърът е масивна променлива, записана с @ или * , операцията за премахване на шаблони се прилага за всеки член на масива от своя страна, а разширението е резултантният списък.

Моделът се разширява, за да създаде шаблон точно както при разширението на пътя. Параметърът се разширява и най-дългата съвпадение на шаблона спрямо неговата стойност се заменя с низ . В първата форма се замества само първото съвпадение. Вторият формуляр прави всички съвпадения на шаблона да бъдат заменени с низ . Ако образецът започва с # , то трябва да съответства в началото на разширената стойност на параметъра . Ако образецът започва с % , той трябва да съответства в края на разширената стойност на параметъра . Ако низа е нула, мачът на шаблона се изтрива и / следният модел може да бъде пропуснат. Ако параметърът е @ или * , операцията за заместване се прилага за всеки позиционен параметър на свой ред и разширението е резултантният списък. Ако параметърът е променлива на масива, записана с @ или * , операцията за заместване се прилага за всеки член на масива от своя страна, а разширението е резултантният списък.

Командно заместване

Подмяната на команда позволява извеждането на команда да замени името на командата. Има две форми:

$ ( команда )

или

" команда "

Баш изпълнява разширението, като изпълнява командата и замества подмяната на командата със стандартния изход на командата, като всички останали нови линии се изтриват. Вградените нови линии не се изтриват, но могат да бъдат премахнати при разделяне на думите. Командата substitution $ (cat file ) може да бъде заменена от еквивалентната, но по-бърза $ (< file ).

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

Заместванията на командите могат да бъдат вложени. За да гнезнете, когато използвате формуляра с обратно виждане, избягвайте вътрешните колебания с обратно наклонена черта.

Ако замяната се появява в двойни кавички, разширяването на думите и разширението на името на пътя не се извършват върху резултатите.

Аритметично разширение

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

$ (( израз ))

Изразът се третира като в двойни кавички, но двоен цитат в скобите не се третира по специален начин. Всички символи в израза претърпяват разширение на параметъра, разширение на низовете, заместване на команди и премахване на котировки. Аритметични замествания могат да бъдат вложени.

Оценката се извършва съгласно правилата, изброени по-долу в ARITHMETIC EVALUATION . Ако изразът е невалиден, bash отпечатва съобщение, показващо неуспех и няма заместване.

Подмяна на процеси

Подмяната на процесите се поддържа на системи, които поддържат наименовани тръби ( FIFOs ) или на метода / dev / fd за именуване на отворени файлове. Той е под формата на <( списък ) или > ( списък ) . Списъкът на процесите се изпълнява със своя вход или изход, свързани с FIFO или някакъв файл в / dev / fd . Името на този файл се предава като аргумент към текущата команда в резултат на разширяването. Ако се използва формулярът > ( списък ) , записът във файла ще осигури вход за списъка . Ако се използва формулярът <( списък ) , файлът, преминал като аргумент, трябва да бъде прочетен, за да се получи изходът от списъка .

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

Разделяне на думите

Обвивката сканира резултатите от разширението на параметрите, заместването на команди и аритметичното разширение, което не се е случило в рамките на двойните котировки за разделяне на думите .

Обвивката третира всеки знак на IFS като разделител и разделя резултатите от другите разширения на думи върху тези символи. Ако IFS е деактивирано или стойността му е точно , по подразбиране, тогава всяка последователност от IFS символи служи за обозначаване на думи. Ако IFS има стойност, различна от стандартната, последователностите от пространството и раздела на знаците за междинното пространство се игнорират в началото и края на думата, стига символът за интервали да е в стойността на IFS (знак за интервали от IFS ). Всеки знак в IFS, който не е интервал IFS , заедно с всички съседни IFS знаци за интервал, очертава поле. Поредица от букви с интервали от IFS също се третира като разделител. Ако стойността на IFS е нула, няма разделяне на думите.

Изрично невалидни аргументи ( "" или "" ) се запазват. Некотираните имплицитни нулеви аргументи, резултат от разширяването на параметри, които нямат стойности, се премахват. Ако параметър без стойност е разширен в двойни кавички, резултатът от нулевия аргумент се запазва.

Имайте предвид, че ако не се получи разширение, не се извършва разделяне.

Разширяване на пътя

След разделяне на думата, освен ако не е зададена опцията -f , bash сканира всяка дума за знаците * ,? , и [ . Ако се появи един от тези символи, тогава думата се разглежда като шаблон и се заменя с азбучно подреден списък с имена на файлове, съответстващи на модела. Ако не се намерят съответстващи имена на файлове и опцията shell nullglob е деактивирана, думата се оставя непроменена. Ако опцията nullglob е зададена и не се намерят съвпадения, думата се премахва. Ако опцията shell shell nocaseglob е активирана, съвпадението се извършва без да се взема предвид случаят с азбучни знаци. Когато се използва модел за разширение на пътя, символът ``. '' В началото на името или непосредствено след наклонена черта трябва да бъде съвпадан изрично, освен ако не е зададена опцията черупка dotglob . Когато отговаряте на името на пътя, символът на наклонена черта винаги трябва да съответства изрично. В други случаи символът ``. '' Не се обработва специално. Вижте описанието на шотта по-долу под SHELL BUILTIN COMMANDS за описание на опциите за nocaseglob , nullglob и dotglob shell.

GLOBIGNORE черупката променлива може да се използва за ограничаване на набор от имена на файлове, съответстващи на шаблон . Ако е зададено GLOBIGNORE , всяко съвпадащо име на файл, което съвпада и с един от шаблоните в GLOBIGNORE, се премахва от списъка с мачове. Имената на файловете ``. '' И `` .. '' винаги се игнорират, дори когато е зададена GLOBIGNORE . Определянето на GLOBIGNORE обаче води до активиране на опцията за черупката dotglob , така че всички други имена на файлове, започващи с ".", Ще съвпадат. За да получите старото поведение на игнорирането на имена на файловете, започвайки с ``. '' , Направете ``. * '' Един от моделите в GLOBIGNORE . Опцията dotglob е деактивирана, когато GLOBIGNORE е изключен.

Съвпадащ модел

Всеки символ, който се показва в шаблон, различен от описания по-долу символ със специален модел, съвпада. Знакът NUL може да не се появява в шаблон. Специалните символи на шаблона трябва да бъдат цитирани, ако трябва да бъдат съчетани буквално.

Специалните символи на модела имат следните значения:

*

Съответства на всеки низ, включително нулевия низ.

?

Съчетава всеки един знак.

[...]

Съчетава всеки от приложените символи. Чифт от символи, разделени с тире, означава изразен израз ; всеки знак, който сортира между тези два знака, включително, използвайки последователността на сортиране и набора от символи на текущия локал, е съчетана. Ако първият символ след [ е ! или a ^, тогава съответният символ не е затворен. Редът на сортиране на знаците в обхватните изрази се определя от текущия локал и стойността на обвивката на LC_COLLATE , ако е зададена. A - може да се съчетае с включването му като първи или последен знак в комплекта. A ] може да бъде съчетано с включването му като първия знак в комплекта.

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

alnum alpha ascii празно cntrl цифрова графика по-нисък печат точка пространство горна дума xdigit
Класът на героите съответства на всеки герой, принадлежащ към този клас. Думата " character character class" съвпада с буквите, цифрите и символа _.

В рамките на [ и ] класът на еквивалентност може да бъде определен, като се използва синтаксисът [= c =] , който съответства на символите с всички знаци със същото тегло за колаж (както е дефинирано от текущия локал).

В рамките на [ и ] , синтаксисът [. символ .] съответства на символа на символа за сортиране.

Ако опцията extglob shell е активирана, използвайки вградения вграден шаблон, се разпознават няколко разширени оператори за съвпадение на шаблони. В следващото описание списък на шаблони е списък на един или повече шаблони, разделени от | , Композитните шаблони могат да се формират, като се използват един или повече от следните под-модели:

? ( списък на моделите )

Съчетава нула или една поява на дадените модели

* ( списък на моделите )

Съответства на нула или повече събития от дадените модели

+ ( списък на моделите )

Съответства на едно или повече събития от дадените модели

@ ( шаблон-списък )

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

! ( списък на моделите )

Съчетава всичко, освен един от дадените модели

Премахване на коментар

След предишните разширения, всички неуредени събития на символите \ , " и ", които не са резултат от някое от горепосочените разширения, се премахват.

пренасочване

Преди да бъде изпълнена командата, нейният вход и изход могат да бъдат пренасочени чрез специална нота, интерпретирана от черупката. Пренасочването може да се използва и за отваряне и затваряне на файлове за текущата среда за изпълнение на обвивката. Следните оператори за пренасочване могат да предхождат или да се появяват навсякъде в проста команда или да следват команда . Пренасочванията се обработват в реда, в който се показват, отляво надясно.

В следващите описания, ако номерът на дескриптора на файла е пропуснат и първият знак на оператора за пренасочване е < , пренасочването се отнася до стандартния вход (дескриптор на файла 0). Ако първият знак на оператора за пренасочване е > , пренасочването се отнася до стандартния изход (описател на файла 1).

Думата, следваща оператора на пренасочване в следните описания, освен ако не е отбелязано друго, се подлага на разширение на разширението, разширение на tilde, разширяване на параметъра, заместване на командата, аритметично разширение, отстраняване на котировки, разширение на пътя и разделяне на думите. Ако се разшири до повече от една дума, bash съобщава за грешка.

Имайте предвид, че редът на пренасочванията е значителен. Например командата

ls > списък 2 > & 1

насочва както стандартен изход, така и стандартна грешка към списъка с файлове, докато командата

ls 2 > & 1 > уроци

насочва само стандартния изход към файловия списък , защото стандартната грешка е дублирана като стандартен изход, преди стандартният изход да бъде пренасочен към dirlist .

Баш обработва няколко имена на файлове, особено когато се използват в пренасочвания, както е описано в следната таблица:

/ dev / fd / fd

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

/ сътрудничество / стандартния вход

Дескрипторът на файлове 0 се дублира.

/ сътрудничество / стандартния изход

Файловият дескриптор 1 се дублира.

/ сътрудничество / STDERR

Дескрипторът на файлове 2 е дублиран.

/ dev / tcp / хост / порт

Ако хост е валидно име на хост или интернет адрес и портът е цяло число на номера на порта или име на услугата, bash се опитва да отвори TCP връзка към съответния гнездо.

/ dev / udp / хост / порт

Ако хост е валидно име на хост или интернет адрес и портът е цяло число номер на порт или име на услугата, баш се опитва да отвори UDP връзка към съответния гнездо.

Невъзможността за отваряне или създаване на файл води до неуспешно пренасочване.

Пренасочване на вход

Пренасочването на входа води до това, че файлът, чието име е резултат от разширяването на думата, ще бъде отворен за четене на дескриптор на файлове n , или стандартния вход (дескриптор на файла 0), ако n не е посочено.

Общият формат за пренасочване на входа е:

[ n ] < дума

Пренасочване на изхода

Пренасочването на продукцията води до това, че файлът, чието име произтича от разширяването на думата, трябва да бъде отворен за писане на файловия дескриптор n , или стандартния изход (описател на файла 1), ако n не е посочено. Ако файлът не съществува, той е създаден; ако тя съществува, тя е съкратена до нулев размер.

Общият формат за пренасочване на изхода е:

[ n ] > дума

Ако операторът за пренасочване е > и опцията за номбълберг на вградения набор е активирана, пренасочването ще се провали, ако файлът, чието име е резултат от разширяването на думата, съществува и е обикновен файл. Ако операторът на пренасочване е > | , или операторът на пренасочване е > и опцията noclobber към настроената вградена команда не е активирана, пренасочването се опитва дори ако файлът, зададен от думата, съществува.

Добавяне на пренасочен изход

Пренасочването на изход по този начин води до това файлът, чието име е резултат от разширяването на думата, да бъде отворено за добавяне към файловия дескриптор n или стандартния изход (файлов дескриптор 1), ако n не е посочено. Ако файлът не съществува, той е създаден.

Общият формат за добавяне на продукцията е:

[ n ] >> дума

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

Bash позволява както стандартния изход (файлов дескриптор 1), така и стандартният изход за грешка (файлов дескриптор 2) да бъдат пренасочени към файла, чието име е разширяването на думата с тази конструкция.

Има два формата за пренасочване на стандартен изход и стандартна грешка:

&> дума

и

> & дума

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

> дума 2 > & 1

Тук Документи

Този тип пренасочване инструктира черупката да чете вход от текущия източник, докато не се види линия, съдържаща само дума (без прагове). Всички линии, прочетени до този момент, се използват като стандартен вход за команда.

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

<< [ - ] дума here-document delimiter

Няма разширение на параметрите, замествания на команди, разширение на аритметика или разширение на пътя. Ако се цитират някакви букви в дума , разделителят е резултат от премахването на цитираната дума и линиите в документа тук не се разширяват. Ако думата не е котирана, всички редове на документа тук се подлагат на разширяване на параметрите, подмяна на команди и аритметично разширение. В последния случай поредицата от символи \ се игнорира и \ трябва да се използва за цитиране на символите \ , $ и ` .

Ако операторът за пренасочване е << - , тогава всички водещи символи от раздели се отстраняват от входните линии и от линията, съдържаща разделител . Това позволява тук документите в скриптовете на черупките да бъдат разделени по естествен начин.

Тук Струни

Един вариант на документите тук, форматът е:

<<< дума

Думата се разширява и се доставя на командата на нейния стандартен вход.

Дублиране на дескриптори на файлове

Операторът на пренасочване

[ n ] <& дума

се използва за дублиране на дескрипторите на входните файлове. Ако думата се разширява до една или повече цифри, дескрипторът на файла, обозначен с n, се превръща в копие на файловия дескриптор. Ако цифрите в дума не определят дескриптор на файла, отворен за въвеждане, възниква грешка при пренасочване. Ако думата се оценява на - , файловият дескриптор n е затворен. Ако n не е посочено, използва се стандартен вход (дескриптор на файла 0).

Операторът

[ n ] > и дума

се използва по подобен начин за дублиране на дескрипторите на изходните файлове. Ако n не е посочено, използва се стандартен изход (дескриптор на файла 1). Ако цифрите в дума не посочват дескриптор на файлове, отворен за изход, възниква грешка при пренасочване. Като специален случай, ако n е пропуснато и думата не се разширява до една или повече цифри, стандартният изход и стандартната грешка се пренасочват, както е описано по-горе.

Преместване на дескриптори на файлове

Операторът на пренасочване

[ n ] <& цифра -

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

По същия начин операторът на пренасочване

[ n ] > & цифра -

премества цифрата на дескриптора на файла в дескриптора на файла n или стандартния изход (описател на файла 1), ако n не е посочено.

Отваряне на дескриптори на файлове за четене и писане

Операторът на пренасочване

[ n ] <> дума

причинява файла, чието име е разширението на думата, което ще бъде отворено за четене и писане на дескриптор на файлове n , или на дескриптор на файлове 0, ако n не е посочено. Ако файлът не съществува, той е създаден.

псевдоними

Псевдонимите позволяват на низа да бъде заменена дума, когато тя се използва като първата дума на проста команда. Shell поддържа списък с псевдоними, които могат да бъдат зададени и дезактивирани с псевдоними и unalias вградени команди (виж SHELL BUILTIN COMMANDS по-долу). Първата дума на всяка команда, ако е некотирана, се проверява, за да се види дали има псевдоним. Ако е така, тази дума се заменя с текста на псевдонима. Името на псевдоними и заместващия текст може да съдържат валиден входен шрифт, включително и споменатите по-горе метасъзнаци , с изключение на това, че името на псевдонима не може да съдържа = . Първата дума на заместващия текст се тества за псевдоними, но думата, която е идентична с разширения псевдоним, не се разширява за втори път. Това означава, че може да се използва псевдоним ls до ls -F , например, и bash не се опитва да рекурсивно разширява заместващия текст. Ако последният знак на стойността на псевдонима е празен , следващата команда дума, следваща псевдонима, също се проверява за разширяване на псевдонима.

Псевдонимите се създават и изброяват с командата Alias и се премахват с командата unalias .

Няма механизъм за използване на аргументи в заместващия текст. Ако са необходими аргументи, трябва да се използва функция за черупки (вижте ФУНКЦИИ по-долу).

Псевдонимите не се разширяват, когато черупката не е интерактивна, освен ако опцията expand_aliases shell е зададена с помощта на shopt (вижте описанието на shopt under SHELL BUILTIN COMMANDS по-долу).

Правилата относно определянето и използването на псевдоними са донякъде объркващи. Баш винаги чете най-малко един пълен ред на въвеждане, преди да изпълни някоя от командите на този ред. Псевдонимите се разширяват при четене на команда, а не когато се изпълняват. Следователно, дефиницията на псевдоним, която се показва на същия ред като друга команда, не влиза в сила, докато не се чете следващият ред на въвеждане. Командите, които следват дефиницията на псевдоним на този ред, не се влияят от новия псевдоним. Това поведение също е проблем, когато се изпълняват функции. Псевдонимите се разширяват, когато се чете определение на функцията, а не когато функцията се изпълнява, защото дефиницията на функцията е съставена команда. Вследствие на това, псевдонимите, дефинирани във функция, не са достъпни, докато не бъде изпълнена тази функция. За да бъдете сигурни, винаги задайте дефиниции на псевдоними на отделен ред и не използвайте псевдоним в съставни команди.

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

ФУНКЦИИ

Функцията за черупки, дефинирана както е описана по-горе в SHELL GRAMMAR , съхранява поредица от команди за по-късно изпълнение. Когато името на функцията за черупки се използва като просто име на команда, се изпълнява списъкът на командите, свързани с това име на функцията. Функциите се изпълняват в контекста на текущата обвивка; не е създаден нов процес, който да ги интерпретира (това противоречи на изпълнението на скрипт на shell). Когато дадена функция се изпълни, аргументите за функцията стават позиционните параметри по време на нейното изпълнение. Специалният параметър # се актуализира, за да отрази промяната. Позиционалният параметър 0 е непроменен. Променливата FUNCNAME е зададена на името на функцията, докато функцията се изпълнява. Всички останали аспекти на средата за изпълнение на обвивката са еднакви между дадена функция и нейния абонат, с изключение на това, че DEBUG капанът (виж описанието на капака, вграден под SHELL BUILTIN COMMANDS по-долу) не е наследен, освен ако функцията не е получила атрибута за проследяване виж описанието на декларираното вградено по-долу).

Променливите, локални на функцията, могат да бъдат декларирани с локалната вградена команда. Обикновено променливите и техните стойности се споделят между функцията и нейния абонат.

Ако връщането на вградената команда се изпълни в дадена функция, функцията завършва и изпълнението се възобновява със следващата команда след повикването на функцията. Когато функцията завърши, стойностите на позиционните параметри и специален параметър # се възстановяват на стойностите, които са имали преди изпълнението на функцията.

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

Функциите могат да бъдат рекурсивни. Не се ограничава броят на рекурсивните повиквания.

АРИМЕТИЧНА ОЦЕНКА

Черупката позволява да бъдат оценени аритметични изрази при определени обстоятелства (вижте командата за вградената команда и Аритметичното разширение ). Оценката се извършва с числа с фиксирана ширина без проверка за преливане, въпреки че разделянето с 0 е заклещено и е означено като грешка. Операторите и тяхното предимство и асоциативност са същите като на езика С. Следният списък на операторите е групиран в нива на оператори с еднакво предимство. Нивата са изброени в низходящ приоритет.

id ++ id -

променлива след увеличаване и постепенно намаляване

++ id - id

променливи преди увеличаване и предварително намаляване

- +

unary минус и плюс

! ~

логическо и битово отрицание

**

степенуване

* /%

умножение, разделяне, остатък

+ -

добавяне, изваждане

<< >>

ляво и дясно бит

<=> = <>

сравнение

==! =

равенство и неравенство

&

bitwise AND

^

бит изключителен OR

|

бит OR

&&

логически AND

||

логично ИЛИ

expr ? expr : израз

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

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

назначение

expr1 , expr2

запетая

Shell променливи са разрешени като операнди; разширяването на параметрите се извършва преди изразяването да бъде оценено. В рамките на даден израз променливите на обвивката могат също да се посочват по име, без да се използва синтаксисът за разширение на параметрите. Стойността на променливата се оценява като аритметичен израз, когато се посочва. Променливата на обвивката не трябва да има свой атрибут integer, който да бъде използван в израз.

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

Операторите се оценяват по приоритет. Под-изразите в скоби се оценяват първо и могат да заменят правилата за предимство по-горе.

УСЛОВНИ ИЗРАЗЕНИЯ

Условните изрази се използват от командата [[ compound] и [ test] и [ builtin commands] за тестване на файлови атрибути и извършване на низови и аритметични сравнения. Експресиите се формират от следните unary или binary първични. Ако даден аргумент за файл към един от първичните елементи е от формата / dev / fd / n , тогава се проверява файловият дескриптор n . Ако аргументът на файла към един от първичните файлове е един от / dev / stdin , / dev / stdout или / dev / stderr , се проверява описанието на файла 0, 1 или 2.

- файл

Вярно, ако файлът съществува.

-b файл

Вярно, ако файлът съществува и е специален файл на блок.

-c файл

Вярно, ако файлът съществува и е специален файл със знаци.

-d файл

Вярно, ако файлът съществува и е директория.

файл

Вярно, ако файлът съществува.

-f файл

Вярно, ако файлът съществува и е обикновен файл.

-g файл

Вярно, ако файлът съществува и е идент.

-h файл

Вярно, ако файлът съществува и представлява символна връзка.

-k файла

Вярно, ако файлът съществува и неговият "лепкав" бит е зададен.

-p файл

Вярно, ако файлът съществува и е наречена тръба (FIFO).

-r файл

Вярно, ако файлът съществува и е четлив.

файла

Вярно, ако файлът съществува и има размер, по-голям от нула.

-t fd

Вярно, ако файловият дескриптор fd е отворен и се отнася до терминал.

-u файл

Вярно, ако файлът съществува и неговият битов идентификатор за зададен потребител е зададен.

-w файл

Вярно, ако файлът съществува и е написан.

-x файл

Вярно, ако файлът съществува и е изпълним.

файл

Вярно, ако файлът съществува и е собственост на ефективния потребителски идентификатор.

-G файл

Вярно, ако файлът съществува и е собственост на ефективния идентификационен номер на групата.

-L файл

Вярно, ако файлът съществува и представлява символна връзка.

-S файл

Вярно, ако файлът съществува и е socket.

-N файл

Вярно, ако файлът съществува и е променен след последното му четене.

file1 - nt file2

Вярно, ако file1 е по-нова (според датата на модификация) от file2 или ако file1 съществува и file2 не.

file1 - ot файл2

Вярно, ако file1 е по-стар от file2 , или ако file2 съществува и file1 не.

file1 -ef file2

Вярно, ако файлът1 и файлът2 се отнасят до едно и също устройство и номера за вход.

-O optname

Истина, ако optname опцията shell е активирана. Вижте списъка с опции под описанието на опцията -o към комплекта, вграден по-долу.

-z низ

Вярно, ако дължината на низа е нула.

-n низ

низ

Вярно е, ако дължината на низа не е нула.

string1 == string2

Вярно е, ако низовете са равни. = може да се използва вместо == за строго съответствие с POSIX.

string1 ! = string2

Вярно, ако низовете не са равни.

string1 < string2

Вярно, ако string1 сортира пред string2 лексикографски в текущия локал.

string1 > string2

Вярно, ако string1 сортира лексикографа след string2 в текущия локал.

arg1 OP arg2

OP е една от -eq , -ne , -lt , -le , -gt или -ge . Тези аритметични двоични оператори връщат true, ако arg1 е равно на, не по-малко от, по-малко или равно на, по-голямо или по-голямо или равно на arg2 , съответно. Arg1 и arg2 могат да бъдат положителни или отрицателни цели числа.

ЕДИНСТВЕНО РАЗШИРЯВАНЕ НА КОМПАНИЯ

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

1. Думите, които анализаторът е означил като задачи за променливи (тези, предхождащи името на командата), и пренасочванията се записват за по-нататъшна обработка.

2. Думите, които не са променливи задачи или пренасочвания, се разширяват. Ако има някакви думи след разширяването, първата дума се приема за името на командата, а останалите думи са аргументите.

3. Пренасочванията се извършват както е описано по-горе в REDIRECTION .

4.Текстът след = при всяко присвояване на променлива претърпява разширение на tilde, разширение на параметъра, заместване на командата, аритметично разширение и отстраняване на котировки преди да бъде присвоено на променливата.

Ако не се получи име на команда, заданията на променливите влияят върху текущата среда на корпуса. В противен случай променливите се добавят към средата на изпълнената команда и не засягат текущата среда на обвивката. Ако някоя от заданията се опита да зададе стойност на readonly променлива, възниква грешка и командата излиза с ненулево състояние.

Ако не се получи име на команда, се извършват пренасочвания, но не засягат текущата среда на корпуса. Грешка при пренасочване причинява командата да излезе с ненулево състояние.

Ако има останало име на команда след разширението, изпълнението продължава, както е описано по-долу. В противен случай командата излиза. Ако едно от разширенията съдържаше замяна на командата, изходното състояние на командата е изходното състояние на последната заменена команда. Ако няма замествания на командата, командата излиза със състояние нула.

ИЗПЪЛНЕНИЕ НА КОМПАНИЯТА

След като командата бъде разделена на думи, ако се получи проста команда и незадължителен списък от аргументи, се предприемат следните действия.

Ако името на командата не съдържа наклонени черти, корпусът се опитва да го открие. Ако има такова име, тази функция се извиква, както е описано по-горе в FUNCTIONS . Ако името не съвпада с функция, черупката я търси в списъка на вградените черупки. Ако се намери съвпадение, този вграден файл се извиква.

Ако името не е функция на черупки, нито е вградена и не съдържа наклонени черти, bash търси всеки елемент от PATH за директория, съдържаща изпълним файл с това име. Баш използва хеш таблица, за да запомни пълните имена на файловете с изпълними файлове (вижте хеш под SHELL BUILTIN COMMANDS по-долу). Пълното търсене на директории в PATH се извършва само ако командата не е намерена в хеш таблицата. Ако търсенето не е успешно, черупката отпечатва съобщение за грешка и връща изходно състояние от 127.

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

Ако това изпълнение се окаже неуспешно, защото файлът не е в изпълним формат и файлът не е директория, се приема, че е скрипт на shell , файл, съдържащ команди на shell. За да я изпълни, се зароди subshell. Тази подсилва се самоинициализира, така че ефектът е като че е била извикана нова обвивка за обработка на скрипта, с изключение на това, че мястото на командите, запомнени от родителя (вижте хеш по-долу под SHELL BUILTIN COMMANDS ), се задържат от детето.

Ако програмата е файл, започващ с #! , останалата част от първия ред определя интерпретатор на програмата. Обвивката изпълнява посочения интерпретатор на операционни системи, които не обработват сами този изпълним формат. Аргументите за преводача се състоят от един единствен незадължителен аргумент, следващ името на преводача на първия ред на програмата, следвано от името на програмата, последвано от командните аргументи, ако има такива.

ЕКОЛОГИЧНА ЕКСПЛОАТАЦИЯ НА КОМБИНАЦИЯТА

Обвивката има среда за изпълнение , която се състои от следното:

* отворени файлове, наследени от черупката при извикване, както е променено от пренасочвания, предоставени на exec вградения

* текущата работна директория, зададена от cd , pushd или popd , или наследена от shell при призоваване

* маската на режима за създаване на файлове, зададена от umask или наследена от родител на shell

* настоящи капани, зададени от капан

* параметри на обвивката, които се задават чрез задаване на променливи или със зададени или наследени от родителя на обвивката в околната среда

* Shell функции, определени по време на изпълнението или наследени от родител на обвивката в околната среда

* опции, активирани при извикване (по подразбиране или с аргументи от командния ред) или чрез задаване

* опции, активирани от

* псевдоними, дефинирани с псевдоним

* различни идентификационни номера на процеси, включително тези на фонови задачи, стойността на $$ и стойността на $ PPID

Когато трябва да се изпълни проста команда, различна от вградена или shell функция, тя се извиква в отделна среда за изпълнение, която се състои от следното. Освен ако не е посочено друго, стойностите се наслеждат от обвивката.

* отворените файлове на корпуса, плюс всички модификации и допълнения, посочени от пренасочванията към командата

* текущата работна директория

* маската за създаване на файла

* Шаблонните променливи, маркирани за експорт, заедно с променливите, експортирани за командата, преминават в средата

* капаните, уловени от черупката, се връщат към стойностите, наследени от родителя на черупката, и пренебрегваните от черупката капани се игнорират

Командата, извикана в тази отделна среда, не може да засегне средата за изпълнение на shell.

Командите за заместване на команди и асинхронни команди се извикват в среда на подсистема, която е дубликат на обкръжаващата среда, с изключение на това, че капаните, уловени от черупката, се връщат към стойностите, които черупката наследи от родителя при призоваване. Вградените команди, които се извикват като част от тръбопровод, също се изпълняват в среда на подсистема. Промените, направени в средата на подсистемата, не могат да повлияят на средата за изпълнение на обвивката.

Ако командата е последвана от & & контрол на заданието не е активен, стандартният вход по подразбиране за командата е правният файл / dev / null . В противен случай назованата команда наследява дескрипторите на файла на платката за повиквания, променена от пренасочвания.