Bash - Linux Command - Unix Command

NAME

Bash - GNU Bourne-Again SHell

SINOPSIS

Bash [mga pagpipilian] [file]

DESCRIPTION

Ang Bash ay isang sh- compatible na interpreter ng wika ng command na nagsasagawa ng mga command na binasa mula sa karaniwang input o mula sa isang file. Isinasama din ni Bash ang mga kapaki-pakinabang na tampok mula sa Korn at C shell ( ksh at csh ).

Bash ay inilaan upang maging isang conformant pagpapatupad ng IEEE POSIX Shell at pagtutukoy ng Tools (IEEE Paggawa Group 1003.2).

MGA OPTION

Bilang karagdagan sa mga opsyon na single-character shell na dokumentado sa paglalarawan ng hanay na command na builtin, ang bash ay tumutukoy sa mga sumusunod na opsyon kapag ito ay ginagamit:

-c string

Kung ang pagpipiliang -c ay naroroon, pagkatapos ay basahin ang mga command mula sa string . Kung may mga argumento pagkatapos ng string , ang mga ito ay itinalaga sa positional parameter, na nagsisimula sa $ 0 .

-i

Kung ang pagpipiliang -i ay naroroon, ang shell ay interactive .

-l

Gumawa ng bash kumilos bilang kung ito ay tinatawag na isang shell ng pag-login (tingnan ang INVOCATION sa ibaba).

-r

Kung ang pagpipilian ng -r ay naroroon, ang shell ay nahihigpit (tingnan ang RESTRICTED SHELL sa ibaba).

-s

Kung ang s option ay naroroon, o kung walang mga argumento na mananatili pagkatapos ng pagpoproseso ng opsyon, pagkatapos ay basahin ang mga command mula sa karaniwang input. Ang pagpipiliang ito ay nagbibigay-daan sa positional parameter na itatakda kapag gumagamit ng interactive shell.

-D

Ang isang listahan ng lahat ng mga double-quoted string na sinundan ng $ ay nakalimbag sa karaniwang ouput. Ito ang mga string na napapailalim sa pagsasalin ng wika kapag ang kasalukuyang lokal ay hindi C o POSIX . Nagpapahiwatig ito ng -n opsyon; walang mga utos ang gagawin.

[- +] O [ shopt_option ]

Ang shopt_option ay isa sa mga pagpipilian ng shell na tinanggap ng shopt builtin (tingnan ang SHELL BUILTIN COMMANDS sa ibaba). Kung ang shopt_option ay naroroon, -O ay nagtatakda ng halaga ng pagpipiliang iyon; + O unsets ito. Kung hindi ibinibigay ang shopt_option , ang mga pangalan at halaga ng mga pagpipilian sa shell na tinanggap ng shopt ay naka-print sa karaniwang output. Kung ang pagpipiliang invocation ay + O , ang output ay ipinapakita sa isang format na maaaring magamit muli bilang input.

-

A - Sinenyasan ang dulo ng mga opsyon at hindi pinapagana ang karagdagang pagpoproseso ng opsyon. Ang anumang mga argumento pagkatapos ng - ay itinuturing bilang mga filename at mga argumento. Ang argumento ng - ay katumbas ng - .

Binibigyang -kahulugan din ni Bash ang isang bilang ng mga pagpipilian sa multi-character. Dapat lumitaw ang mga opsyong ito sa command line bago makilala ang mga opsyon na single-character.

--dump-po-strings

Katumbas sa -D , ngunit ang output ay nasa GNU gettext po (portable object) na format ng file.

--dump-string

Katumbas sa -D .

- Tumulong

Magpakita ng mensahe sa paggamit sa standard output at matagumpay na lumabas.

--init file ng file

- file ng file

Ipatupad ang mga utos mula sa file sa halip ng standard personal initialization file ~ /. Bashrc kung ang shell ay interactive (tingnan ang INVOCATION sa ibaba).

--mag log in

Katumbas sa -l .

- walang pag-asa

Huwag gamitin ang library ng GNU readline upang basahin ang mga command line kapag ang shell ay interactive.

--noprofile

Huwag basahin ang alinman sa system-wide startup file / etc / profile o anumang ng mga personal na initialisation file ~ / .bash_profile , ~ / .bash_login , o ~ / .profile . Bilang default, ang bash ay nagbabasa ng mga file na ito kapag ito ay ginagamit bilang isang shell ng pag-login (tingnan ang INVOCATION sa ibaba).

--Norc

Huwag basahin at isagawa ang personal initialization file ~ /. Bashrc kung ang shell ay interactive. Ang opsyon na ito ay sa pamamagitan ng default kung ang shell ay tinatawag na sh .

--posix

Baguhin ang pag-uugali ng Bash kung saan ang default na operasyon ay naiiba sa pamantayan ng POSIX 1003.2 upang tumugma sa standard ( posix mode ).

- pinaghihigpitan

Ang shell ay nahihigpitan (tingnan ang RESTRICTED SHELL sa ibaba).

--rpm-nangangailangan

Gumawa ng listahan ng mga file na kinakailangan para sa shell script na tumakbo. Nagpapahiwatig ito ng '-n' at napapailalim sa parehong mga limitasyon bilang sumulat ng pagsusuri ng oras ng pag-check ng error; Ang mga backtick, [] na mga pagsusulit, at mga pag-eval ay hindi ma-parse upang ang ilang mga dependency ay maaaring napalampas. - Magsalita Katumbas sa -v .

- Pagbabago

Ipakita ang impormasyon ng bersyon para sa halimbawang ito ng malakas na palo sa karaniwang output at matagumpay na lumabas.

MGA PANGANGATWIRAN

Kung ang mga argumento ay mananatili pagkatapos ng pagpoproseso ng opsyon, at hindi ang ibinigay na -c o ang -s na ibinigay, ang unang argument ay ipinapalagay na ang pangalan ng isang file na naglalaman ng mga command shell. Kung ang bash ay tinatawag sa ganitong paraan, ang $ 0 ay nakatakda sa pangalan ng file, at ang positional parameter ay nakatakda sa mga natitirang argumento. Binabasa at isinasagawa ng Bash ang mga utos mula sa file na ito, pagkatapos ay lumabas. Ang exit status ng Bash ay ang exit status ng huling command na isinagawa sa script. Kung walang mga utos ang naisakatuparan, ang exit status ay 0. Ang isang pagtatangka ay unang ginawa upang buksan ang file sa kasalukuyang direktoryo, at, kung walang file ay natagpuan, ang shell ay naghahanap ng mga direktoryo sa PATH para sa script.

INVOCATION

Ang isang shell ng pag-login ay isa na ang unang character ng argument zero ay isang - , o isa na nagsimula sa opsyon sa --login .

Ang isang interactive na shell ay nagsimula nang walang mga argumento na hindi opsyon at wala ang pagpipiliang -c na ang karaniwang input at output ay parehong nakakonekta sa mga terminal (tulad ng tinutukoy ng isatty (3)), o sinimulan ng isang -i na opsyon. Ang PS1 ay nakatakda at $ - kasama ako kung ang bash ay interactive, na nagpapahintulot sa isang script ng shell o isang startup file upang subukan ang estado na ito.

Ang mga sumusunod na talata ay naglalarawan kung paano ipinapatupad ng bash ang mga startup file nito. Kung ang alinman sa mga file ay umiiral ngunit hindi mababasa, ang mga ulat ng bash ay isang error. Ang mga Tildes ay pinalawak sa mga pangalan ng file tulad ng inilarawan sa ibaba sa ilalim ng Pagpapalawak ng Tilde sa seksyon ng EXPANSION .

Kapag ang bash ay tinatawag bilang isang interactive na shell ng pag-login, o bilang isang di-interactive na shell na may opsyon na -login , unang binabasa at isinasagawa ang mga command mula sa file / etc / profile , kung umiiral ang file na iyon. Matapos basahin ang file na iyon, hinahanap nito ang ~ / .bash_profile , ~ / .bash_login , at ~ / .profile , sa utos na iyon, at binabasa at isinasagawa ang mga utos mula sa una na umiiral at nababasa. Ang opsyon sa --noprofile ay maaaring gamitin kapag ang shell ay nagsimula upang pagbawalan ang pag-uugali na ito.

Kapag lumabas ang isang shell ng pag-login, ang pagbasa ng bash at pagpapatupad ng mga command mula sa file ~ / .bash_logout , kung umiiral ito.

Kapag ang isang interactive na shell na hindi isang shell ng pagsisimula ay sinimulan, ang bash ay bumabasa at nagsasagawa ng mga utos mula sa ~ /. Bashrc , kung umiiral ang file na iyon. Maaaring ito ay inhibited sa pamamagitan ng paggamit ng --norc na opsyon. Ang pagpipiliang file ng file na -rcfile ay puwersahin ang bash upang basahin at isagawa ang mga command mula sa file sa halip na ~ /. Bashrc .

Kapag ang bash ay nagsimula nang hindi interactively, upang magpatakbo ng isang script ng shell, halimbawa, tinitingnan nito ang variable na BASH_ENV sa kapaligiran, pinalalaki ang halaga nito kung ito ay lilitaw doon, at ginagamit ang pinalawak na halaga bilang pangalan ng isang file na basahin at isakatuparan . Bash ay kumikilos na parang ang sumusunod na utos ay isinagawa:

kung [-n "$ BASH_ENV"]; pagkatapos. "$ BASH_ENV"; fi

ngunit ang halaga ng PATH variable ay hindi ginagamit upang maghanap para sa pangalan ng file.

Kung ang bash ay tinatawag na pangalan sh , sinusubukan nito na gayahin ang pag-uugali ng startup ng mga makasaysayang bersyon ng sh nang mas malapit hangga't maaari, habang sumusunod sa POSIX standard pati na rin. Kapag ginagamit bilang isang interactive na shell ng pag-login, o isang di-interactive na shell na may opsyon na - login , sinubukan muna itong basahin at isagawa ang mga utos mula sa / etc / profile at ~ / .profile , sa utos na iyon. Ang opsyon sa --noprofile ay maaaring gamitin upang pagbawalan ang pag-uugali na ito. Kapag ginagamit bilang isang interactive na shell na may pangalang sh , ang bash ay tumitingin sa variable na ENV , nagpapalawak ng halaga nito kung ito ay tinukoy, at ginagamit ang pinalawak na halaga bilang pangalan ng isang file na basahin at isagawa. Dahil ang isang shell na tinatawag na sh ay hindi nagtatangkang magbasa at mag-execute ng mga command mula sa anumang iba pang mga file ng startup, ang opsyon na -rcfile ay walang epekto. Ang di-interactive na shell na sinasabing may pangalang sh ay hindi nagtatangka na basahin ang anumang iba pang mga file ng startup. Kapag nananawagan bilang sh , ang bash ay pumasok sa posix mode pagkatapos mabasa ang mga startup file.

Kapag ang bash ay nagsimula sa posix mode, tulad ng opsyon na - opix command line, sumusunod ito sa standard na POSIX para sa mga startup file. Sa mode na ito, ang mga interactive na shell ay palawakin ang variable ng ENV at ang mga command ay binabasa at isinagawa mula sa file na ang pangalan ay pinalawak na halaga. Walang iba pang mga startup file ang nababasa.

Sinusubukan ng Bash na matukoy kung kailan ito tatakbo ng remote shell na daemon, kadalasan ay rshd . Kung tinutukoy ng bash na ito ay pinapatakbo ng rshd , bumabasa at nagsasagawa ng mga utos mula ~ /. Bashrc , kung umiiral ang file na iyon at nababasa. Hindi nito gagawin kung mahihingi bilang sh . Ang --norc na opsyon ay maaaring gamitin upang pagbawalan ang pag-uugali na ito, at ang - opsyon na rcfile ay maaaring gamitin upang pilitin ang isa pang file na mabasa, ngunit ang rshd ay hindi karaniwang tumatawag sa shell sa mga opsyong iyon o pahintulutan silang tiyakin.

Kung ang shell ay nagsimula sa epektibong user (grupo) id hindi katumbas ng tunay na user (grupo) id, at ang pagpipilian sa -p ay hindi ibinibigay, walang mga startup file ang nababasa, ang mga function ng shell ay hindi minana mula sa kapaligiran, ang SHELLOPTS Ang variable, kung ito ay lilitaw sa kapaligiran, ay hindi pinansin, at ang epektibong user id ay naka-set sa totoong user id. Kung ang pagpipiliang -p ay ibinibigay sa invocation, ang pag-uugali ng startup ay pareho, ngunit hindi na-reset ang epektibong user id.

MGA DEFINISYON

Ang mga sumusunod na kahulugan ay ginagamit sa buong pahinga ng dokumentong ito.

blangko

Isang puwang o tab.

salita

Isang pagkakasunod-sunod ng mga character na itinuturing na isang solong yunit ng shell. Kilala rin bilang isang token .

pangalan

Isang salita na binubuo lamang ng mga alphanumeric na character at underscore, at nagsisimula sa isang alpabetikong character o underscore. Tinutukoy din bilang isang identifier .

metacharacter

Ang isang character na, kapag hindi nabanggit, naghihiwalay ng mga salita. Isa sa mga sumusunod:

| &; () <> space tab

control operator

Ang isang token na nagsasagawa ng isang control function. Ito ay isa sa mga sumusunod na simbolo:

|| & &&; ;; () |

MGA RESULTA NG MGA SALITA

Ang mga nakalaang salita ay mga salita na may espesyal na kahulugan sa shell. Ang mga sumusunod na salita ay kinikilala bilang nakalaan kapag hindi nakalap at ang unang salita ng isang simpleng utos (tingnan ang SHELL GRAMMAR sa ibaba) o ang ikatlong salita ng isang kaso o para sa utos:

! ang kaso ay ginawa elif iba pa esac fi para sa function kung sa piliin pagkatapos hanggang habang {} oras [[]]

SHELL GRAMMAR

Simple Commands

Ang isang simpleng command ay isang pagkakasunud-sunod ng mga opsyonal na variable na takdang-aralin na sinusundan ng mga blangko- nakasulat na mga salita at redirections, at tinapos ng isang operator ng kontrol . Tinutukoy ng unang salita ang utos na isagawa, at ipinapasa bilang argument zero. Ang natitirang mga salita ay ipinapasa bilang mga argumento sa tinatawag na utos.

Ang halaga ng return ng isang simpleng command ay ang exit status nito, o 128+ n kung ang utos ay tinapos ng signal n .

Pipelines

Ang pipeline ay isang pagkakasunud-sunod ng isa o higit pang mga utos na pinaghiwalay ng character | . Ang format para sa pipeline ay:

[ oras [ -p ]] [! ] command [ | command2 ...]

Ang karaniwang output ng command ay konektado sa pamamagitan ng isang pipe sa karaniwang input ng command2 . Ang koneksyon na ito ay isinagawa bago ang anumang mga redirections na tinukoy ng command (tingnan ang PAGBABAGO sa ibaba).

Kung ang nakalaan na salita ! nauuna ang isang pipeline, ang exit status ng pipeline na iyon ay ang lohikal na HINDI ng katayuan ng exit ng huling utos. Kung hindi, ang katayuan ng pipeline ay ang exit status ng huling command. Naghihintay ang shell para sa lahat ng mga utos sa pipeline upang tapusin bago bumalik ang isang halaga.

Kung ang oras na nakalaan na salita ay nauna sa isang pipeline, ang lumipas na pati na rin ang gumagamit at sistema ng oras na natupok ng pagpapatupad nito ay iniulat kapag ang pipeline ay tinatapos. Binabago ng pagpipilian ng -p ang format ng output sa tinukoy ng POSIX. Ang variable ng TIMEFORMAT ay maaaring itakda sa isang format na string na tumutukoy kung paano dapat ipapakita ang impormasyon sa pag- teylate ; tingnan ang paglalarawan ng TIMEFORMAT sa ilalim ng Mga Variable ng Shell sa ibaba.

Ang bawat command sa isang pipeline ay isinasagawa bilang isang hiwalay na proseso (ibig sabihin, sa isang subshell).

Listahan

Ang isang listahan ay isang pagkakasunud-sunod ng isa o higit pang mga pipeline na pinaghiwalay ng isa sa mga operator ; , & , && , o || , at opsyonal na tinapos ng isa sa ; , & , o .

Ng mga operator ng listahan, && at || may pantay na pangunahin, na sinusundan ng ; at &, na may pantay na pangunahin.

Ang isang pagkakasunud-sunod ng isa o higit pang mga bagong linya ay maaaring lumitaw sa isang listahan sa halip na isang tuldok-kuwit upang limasin ang mga utos.

Kung ang isang command ay tinapos ng operator ng kontrol at , ang shell ay nagpapatupad ng command sa background sa isang subshell. Ang shell ay hindi naghihintay para matapos ang command, at ang katayuan ng return ay 0. Mga utos na pinaghihiwalay ng isang ; ay pinaandar nang sunud-sunod; ang shell ay naghihintay para sa bawat command upang wakasan naman. Ang katayuan ng pagbabalik ay ang exit status ng huling command na isinagawa.

Ang mga operator ng control && at || ipakahulugan AT listahan at OR listahan, ayon sa pagkakabanggit. May isang form sa AT ang listahan

command1 && command2

Ang command2 ay papatayin kung, at kung lamang, ang command1 ay nagbabalik ng isang exit status ng zero.

Ang isang listahan ng OR ay ang form

command1 || command2

Ang command2 ay papatayin kung at kung ang command1 ay nagbalik ng isang hindi-zero exit status. Ang katayuan ng pagbabalik ng mga listahan ng AT at O ​​ay ang exit status ng huling command na isinagawa sa listahan.

Compound Commands

Ang utos ng compound ay isa sa mga sumusunod:

( listahan )

Ang listahan ay isinasagawa sa isang subshell. Ang mga variable na takdang-aralin at mga builtin command na nakakaapekto sa kapaligiran ng shell ay hindi mananatiling may bisa matapos makumpleto ang command. Ang katayuan ng pagbabalik ay ang katayuan ng paglabas ng listahan .

{ listahan ; }

Ang listahan ay pinaandar lamang sa kasalukuyang kapaligiran ng shell. Ang listahan ay dapat na wakasan sa isang newline o semicolon. Ito ay kilala bilang isang command group . Ang katayuan ng pagbabalik ay ang katayuan ng paglabas ng listahan . Tandaan na hindi katulad ng metacharacters ( at ) , { at } ay nakareserba na mga salita at dapat mangyari kung saan pinahihintulutan na makilala ang nakalaan na salita. Dahil hindi sila nagiging sanhi ng break na salita, dapat silang ihiwalay mula sa listahan sa pamamagitan ng whitespace.

(( pagpapahayag ))

Ang expression ay sinusuri ayon sa mga patakaran na inilarawan sa ibaba sa ilalim ng ARITHMETIC EVALUATION . Kung ang halaga ng expression ay hindi zero, ang return status ay 0; kung hindi man ang katayuan ng pagbabalik ay 1. Ito ay eksaktong katumbas ng " pagpapahayag ".

[[ pagpapahayag ]]

Bumalik ng isang katayuan ng 0 o 1 depende sa pagsusuri ng kondisyon na pagpapahayag ng expression . Ang mga ekspresyon ay binubuo ng mga primarya na inilarawan sa ibaba sa ilalim ng MGA KONDISYONAL NA MGA KAHULUGAN . Ang pagbaba ng salita at pagpapalawak ng pathname ay hindi isinagawa sa mga salita sa pagitan ng [[ at ]] ; pagpapalawak ng tilde, parameter at pagpapalawak ng variable, pagpapalawak ng aritmetika, pagpapalit ng utos, pagpapalit ng proseso, at pagtanggal ng pag-quote ay isinagawa.

Kapag ang == at ! = Operator ay ginagamit, ang string sa kanan ng operator ay itinuturing na isang pattern at naitugma ayon sa mga patakaran na inilarawan sa ibaba sa ilalim ng Pagtutugma ng Pattern . Ang halaga ng return ay 0 kung ang string ay tumutugma o hindi tumutugma sa pattern, ayon sa pagkakabanggit, at kung hindi man. Anumang bahagi ng pattern ay maaaring naka-quote upang pilitin ito upang maitugma bilang isang string.

Ang mga expression ay maaaring pinagsama gamit ang sumusunod na mga operator, na nakalista sa nagpapababa ng pagkakasunud-sunod ng pangunahin:

( pagpapahayag )

Ibinabalik ang halaga ng pagpapahayag . Ito ay maaaring gamitin upang i-override ang normal na precedence ng mga operator.

! pagpapahayag

Totoo kung mali ang pagpapahayag .

expression1 && expression2

Totoo kung ang parehong expression1 at expression2 ay totoo.

expression1 || expression2 Totoo kung ang expression1 o expression2 ay totoo.

Ang && at || Hindi sinusuri ng mga operator ang expression2 kung ang halaga ng expression1 ay sapat upang matukoy ang return value ng buong conditional expression.

para sa pangalan [ sa salita ]; gawin listahan ; tapos na

Ang listahan ng mga sumusunod na salita ay pinalawak, na bumubuo ng isang listahan ng mga item. Ang variable na pangalan ay nakatakda sa bawat elemento ng listahang ito sa pagliko, at ang listahan ay pinaandar sa bawat oras. Kung ang salita sa salita ay tinanggal, ang para sa command ay nagpapatupad ng listahan ng isang beses para sa bawat positional parameter na naka-set (tingnan ang PARAMETERS sa ibaba). Ang katayuan ng pagbabalik ay ang exit status ng huling command na executes. Kung ang pagpapalawak ng mga item na sumusunod sa mga resulta sa isang walang laman na listahan, walang mga utos ang naisakatuparan, at ang katayuan ng pagbalik ay 0.

para sa (( expr1 ; expr2 ; expr3 )); gawin listahan ; tapos na

Una, ang pagsusulit ng aritmetika expr1 ay sinusuri ayon sa mga patakaran na inilarawan sa ibaba sa ilalim ng ARITHMETIC EVALUATION . Ang expr2 na pang- aritmetika expression ay sinusuri nang paulit-ulit hanggang sa ito ay sinusuri sa zero. Ang bawat oras expr2 sinusuri sa isang non-zero na halaga, ang listahan ay pinaandar at ang aritmetika expression expr3 ay sinusuri. Kung ang anumang expression ay tinanggal, ito ay behaves bilang kung sinusuri ito sa 1. Ang halaga ng return ay ang exit status ng huling command sa listahan na naisakatuparan, o maling kung alinman sa mga expression ay hindi wasto.

piliin ang pangalan [ sa salita ]; gawin listahan ; tapos na

Ang listahan ng mga sumusunod na salita ay pinalawak, na bumubuo ng isang listahan ng mga item. Ang hanay ng pinalawak na mga salita ay naka-print sa karaniwang error, ang bawat isa ay nauna sa pamamagitan ng isang numero. Kung ang salita ay tinanggal, ang mga posisyong parameter ay naka-print (tingnan ang MGA PARAMETER sa ibaba). Pagkatapos ay ipinapakita ang prompt ng PS3 at isang linya na binasa mula sa karaniwang input. Kung ang linya ay binubuo ng isang numero na nararapat sa isa sa mga ipinapakitang salita, ang halaga ng pangalan ay nakatakda sa salitang iyon. Kung ang linya ay walang laman, ang mga salita at prompt ay muling ipapakita. Kung nabasa ang EOF, natapos ang utos. Anumang iba pang mga halaga basahin ang nagiging sanhi ng pangalan na itatakda sa null. Ang line read ay naka-save sa variable na REPLY . Ang listahan ay papatayin pagkatapos ng bawat seleksyon hanggang sa isang command break na naisakatuparan. Ang exit status of select ay ang exit status ng huling command executed sa list , o zero kung walang command na executed.

case word sa [[(] pattern [ | pattern ]

Ang unang utos ng kaso ay nagpapalawak ng salita , at sinusubukan na itugma ito laban sa bawat pattern , gamit ang parehong mga panuntunan na tumutugma sa pagpapalawak ng pathname (tingnan ang Pagpapalawak ng Pathname sa ibaba). Kapag ang isang tugma ay natagpuan, ang katumbas na listahan ay naisakatuparan. Matapos ang unang tugma, walang mga kasunod na tugma ay sinubukan. Ang katayuan ng exit ay zero kung walang pattern na tumutugma. Kung hindi, ito ay ang exit status ng huling command na isinagawa sa listahan .

kung ang listahan ; pagkatapos ay ilista; [ listahan ng elif ; pagkatapos ay ilista ; ] ... [ ibang listahan ; ] fi

Ang kung ang listahan ay pinaandar. Kung ang katayuan ng exit nito ay zero, ang listahan pagkatapos ay papatayin. Kung hindi man, ang bawat listahan ng elif ay papatayin, at kung ang katayuan ng exit nito ay zero, ang kaukulang listahan pagkatapos ay papatupad at ang kompleto na ang utos. Kung hindi, ang ibang listahan ay papatayin, kung mayroon. Ang exit status ay ang exit status ng huling command executed, o zero kung walang kondisyon na sinubukan totoo.

habang ang listahan ; gawin listahan ; tapos na

hanggang sa listahan ; gawin listahan ; tapos na

Ang habang utos ay patuloy na nagpapatupad ng listahan ng ginagawa hangga't ang huling command sa listahan ay nagbabalik ng isang exit status ng zero. Ang hanggang command ay magkapareho sa utos habang , maliban na ang test ay negated; ang listahan ng ginagawa ay papatayin hangga't ang huling utos sa listahan ay nagbabalik ng isang hindi-zero na exit status. Ang exit status ng habang at hanggang sa mga utos ay ang exit status ng huling do command list executed, o zero kung wala ay executed.

[ function ] name () { list ; }

Tinutukoy nito ang isang function na pinangalanang pangalan . Ang katawan ng function ay ang listahan ng mga utos sa pagitan ng {at}. Ang listahang ito ay isinasagawa kung kailan tinukoy ang pangalan bilang pangalan ng isang simpleng utos. Ang exit status ng isang function ay ang exit status ng huling command na isinagawa sa katawan. (Tingnan ang Mga FUNCTION sa ibaba.)

MGA KOMENTARYO

Sa isang di-interactive na shell, o isang interactive na shell kung saan ang opsyon na interactive_comments sa shopt builtin ay pinagana (tingnan ang SHELL BUILTIN COMMANDS sa ibaba), isang salita na nagsisimula sa # nagiging sanhi ng salitang iyon at lahat ng natitirang mga character sa linya na iyon na hindi papansinin. Ang isang interactive na shell nang hindi pinagana ang opsyon na interactive_comments ay hindi pinapayagan ang mga komento. Ang opsyon na interactive_comments ay sa pamamagitan ng default sa interactive shell.

PAGPILI

Ang pag-quote ay ginagamit upang alisin ang espesyal na kahulugan ng ilang mga character o mga salita sa shell. Maaaring gamitin ang pag-quote upang huwag paganahin ang espesyal na paggamot para sa mga espesyal na character, upang maiwasan ang nakareserbang mga salita mula sa pagiging kinikilala bilang tulad, at upang maiwasan ang pagpapalawak ng parameter.

Ang bawat isa sa mga metacharacters na nakalista sa itaas sa ilalim ng mga DEFINISYON ay may espesyal na kahulugan sa shell at dapat na maipipi kung ito ay upang kumatawan mismo.

Kapag ginagamit ang mga pasilidad sa pagpapalawak ng command history, karaniwan ang pagpapalawak ng character ng kasaysayan ! , dapat na naka-quote upang maiwasan ang pagpapalawak ng kasaysayan.

Mayroong tatlong mga mekanismo ng pag-quote: ang character ng pagtakas , solong quotes, at double quotes.

Ang isang di-binanggit na backslash ( \ ) ay ang character ng pagtakas . Pinipreserba nito ang literal na halaga ng susunod na character na sumusunod, maliban sa . Kung ang isang pariralang \ ay lilitaw, at ang backslash ay hindi mismo nakasiping, ang \ ay itinuturing bilang isang pagpapatuloy ng linya (iyon ay, ito ay aalisin mula sa input stream at epektibong hindi pinansin).

Ang pag-encode ng mga character sa mga solong panipi ay nagpapanatili ng literal na halaga ng bawat karakter sa loob ng mga panipi. Ang isang solong quote ay hindi maaaring mangyari sa pagitan ng mga solong quotes, kahit na sa pamamagitan ng isang backslash.

Ang pag-encode ng mga character sa double quotes ay pinapanatili ang literal na halaga ng lahat ng mga character sa loob ng mga panipi, maliban sa $ , ` , at \ . Ang mga character $ at ` panatilihin ang kanilang espesyal na kahulugan sa loob ng double quotes. Ang backslash ay nagpapanatili lamang ng espesyal na kahulugan nito kapag sinundan ng isa sa mga sumusunod na character: $ , ` , " , \ , o . Ang isang double quote ay maaaring naka-quote sa loob ng double quotes sa pamamagitan ng nauna ito sa isang backslash.

Ang mga espesyal na parameter * at @ ay may espesyal na kahulugan kapag may double quotes (tingnan ang MGA PARAMETERS sa ibaba).

Ang mga salita ng form $ ' string ' ay espesyal na itinuturing. Ang salitang nagpapalawak sa string , na may mga backslash-escaped na mga character na pinalitan bilang specifed ng ANSI C standard. Ang mga backslash escape sequences, kung kasalukuyan, ay decoded tulad ng sumusunod:

\ a

alerto (kampanilya)

\ b

backspace

\ e

isang escape character

\ f

form feed

\ n

bagong linya

\ r

bumalik ang karwahe

\ t

pahalang na tab

\ v

vertical na tab

\\

backslash

'

solong quote

\ nnn

ang walong-bit na character na ang halaga ay ang halaga ng octal nnn (isa hanggang tatlong digit)

\ x HH

ang walong-bit na character na ang halaga ay ang hexadecimal value HH (isa o dalawang hex digit)

\ c x

isang kontrol- x character

Ang pinalawak na resulta ay single-quoted, na parang ang dollar sign ay hindi pa naroroon.

Ang isang double-quoted na string na sinundan ng isang dollar sign ( $ ) ay magiging sanhi na ang string ay isinalin ayon sa kasalukuyang locale. Kung ang kasalukuyang lokal ay C o POSIX , ang dollar sign ay hindi pinansin. Kung ang string ay isinalin at papalitan, kapalit ay double-quoted.

MGA PARAMETERS

Ang isang parameter ay isang entity na nag-iimbak ng mga halaga. Maaari itong maging isang pangalan , numero, o isa sa mga espesyal na character na nakalista sa ibaba sa ilalim ng Mga Espesyal na Parameter . Para sa mga layunin ng shell, ang isang variable ay isang parameter na ipinahiwatig ng isang pangalan . Ang variable ay may halaga at zero o higit pang mga katangian . Ang mga katangian ay itinalaga gamit ang ipinapahayag na builtin command (tingnan ang ipinapahayag sa ibaba sa SHELL BUILTIN COMMANDS ).

Ang isang parameter ay nakatakda kung ito ay itinalaga ng isang halaga. Ang null string ay isang wastong halaga. Sa sandaling nakatakda ang isang variable, maaari itong i-unset lamang sa pamamagitan ng paggamit ng unset na builtin command (tingnan ang SHELL BUILTIN COMMANDS sa ibaba).

Ang isang variable ay maaaring italaga sa pamamagitan ng isang pahayag ng form

pangalan = [ halaga ]

Kung ang halaga ay hindi ibinigay, ang variable ay itinalaga ang null string. Ang lahat ng mga halaga ay sumasailalim sa expansion ng tilde, parameter at variable expansion, command substitution, pagpapalawak ng aritmetika, at pagtanggal ng quote (tingnan ang EXPANSION sa ibaba). Kung ang variable ay may integer attribute set, pagkatapos ay ang halaga ay napapailalim sa pagpapalawak ng aritmetika kahit na ang expansion ($) () ay hindi ginagamit (tingnan ang Pagpapalawak ng Aritmetika sa ibaba). Ang paghahati ng salita ay hindi ginaganap, maliban sa "$ @" gaya ng ipinaliwanag sa ibaba sa ilalim ng Mga Espesyal na Parameter . Ang pagpapalawak ng pathname ay hindi gumanap. Ang mga pahayag ng assignment ay maaari ring lumitaw bilang argumento sa mga ipinapahayag , typeet , i- export , readonly , at mga lokal na builtin command.

Posisyonal na Parameter

Ang positional na parameter ay isang parameter na tinukoy ng isa o higit pang mga digit, maliban sa isang digit na 0. Ang posisyon ng mga parameter ay itinalaga mula sa mga argumento ng shell kapag ito ay nananawagan, at maaaring maitalaga muli gamit ang set builtin command. Posisyonal na mga parameter ay hindi maaaring italaga sa mga pahayag ng pagtatalaga. Ang positional parameter ay pansamantalang pinalitan kapag ang isang function ng shell ay isinagawa (tingnan ang mga FUNCTION sa ibaba).

Kapag ang isang positional parameter na binubuo ng higit sa isang solong digit ay pinalawak, dapat itong nakapaloob sa mga tirante (tingnan ang EXPANSION sa ibaba).

Mga Espesyal na Parameter

Ang shell ay may espesyal na mga parameter. Ang mga parameter na ito ay maaari lamang i-reference; Ang pagtatalaga sa kanila ay hindi pinahihintulutan.

*

Lumalawak sa positional parameter, simula sa isa. Kapag ang pagpapalawak ay nangyayari sa loob ng double quotes, lumalawak ito sa isang salita na may halaga ng bawat parameter na pinaghihiwalay ng unang karakter ng espesyal na variable ng IFS . Iyon ay, ang " $ * " ay katumbas ng " $ 1 c $ 2 c ... ", kung saan ang c ay ang unang karakter ng halaga ng variable na IFS . Kung ang IFS ay hindi naka-set, ang mga parameter ay pinaghihiwalay ng mga puwang. Kung ang IFS ay null, ang mga parameter ay sumali nang walang mga intervening separators.

@

Lumalawak sa positional parameter, simula sa isa. Kapag ang pagpapalawak ay nangyayari sa loob ng double quotes, ang bawat parameter ay lumalawak sa isang hiwalay na salita. Iyon ay, ang " $ @ " ay katumbas ng " $ 1 " " $ 2 " ... Kapag walang posisyong parameter, " $ @ " at $ @ palawakin sa wala (ibig sabihin, ang mga ito ay aalisin).

#

Pinapalawak ang bilang ng positional parameter sa decimal.

?

Lumalawak sa kalagayan ng pipeline na pinakahuling pinaandar na bago pa lang pinapatakbo.

-

Pinapalawak sa kasalukuyang mga flag ng opsyon na tinukoy sa pagsang-ayon, sa pamamagitan ng hanay na command na builtin, o mga itinakda ng shell mismo (tulad ng opsiyon ng -i ).

$

Lumalawak sa ID ng proseso ng shell. Sa isang () subshell, lumalawak ito sa ID ng proseso ng kasalukuyang shell, hindi ang subshell.

!

Pinapalawak sa ID ng proseso ng pinakahuling executed background (asynchronous) na utos.

0

Lumalawak sa pangalan ng shell o shell script. Ito ay naka-set sa initialization ng shell. Kung bash ay mahihingi sa isang file ng mga utos, ang $ 0 ay naka-set sa pangalan ng file na iyon. Kung ang bash ay nagsimula sa pagpipiliang -c , pagkatapos ay ang $ 0 ay nakatakda sa unang argumento pagkatapos na maisakatuparan ang string, kung ang isa ay naroroon. Kung hindi man, ito ay naka-set sa pangalan ng file na ginamit upang tumawag sa bash , tulad ng ibinigay ng argument zero.

_

Sa shell startup, itakda sa ganap na pangalan ng file ng shell o shell script na naisakatuparan bilang nakapasa sa listahan ng argumento. Sa dakong huli, lumalawak sa huling argumento sa naunang utos, pagkatapos ng pagpapalawak. Itatakda din sa buong pangalan ng file ng bawat command na isinagawa at inilagay sa kapaligiran na nailipat sa utos na iyon. Kapag tinitingnan ang mail, pinanatili ng parameter na ito ang pangalan ng mail file na kasalukuyang sinusuri.

Mga Variable ng Shell

Ang mga sumusunod na variable ay itinakda ng shell:

BASH

Lumalawak sa buong pangalan ng file na ginamit upang tumawag sa ganitong pagkakataon ng bash .

BASH_VERSINFO

Isang readonly array variable na ang mga miyembro ay nagtataglay ng bersyon ng impormasyon para sa halimbawang ito ng bash . Ang mga halagang itinalaga sa mga miyembro ng array ay ang mga sumusunod:

BASH_VERSINFO [ 0]

Ang pangunahing numero ng bersyon (ang release ).

BASH_VERSINFO [ 1]

Ang menor na numero ng bersyon (ang bersyon ).

BASH_VERSINFO [ 2]

Ang antas ng patch.

BASH_VERSINFO [ 3]

Ang build version.

BASH_VERSINFO [ 4]

Ang katayuan ng pag-release (hal., Beta1 ).

BASH_VERSINFO [ 5]

Ang halaga ng MACHTYPE .

BASH_VERSION

Lumalawak sa isang string na naglalarawan sa bersyon ng halimbawang ito ng bash .

COMP_CWORD

COMP_LINE

Ang kasalukuyang linya ng command. Ang variable na ito ay magagamit lamang sa mga pag-andar ng shell at mga panlabas na utos na sinasadya ng mga pasilidad na maaaring makamit sa programmable (tingnan ang Programmable Completion sa ibaba).

COMP_POINT

COMP_WORDS

Isang array variable (tingnan ang Mga Array sa ibaba) na binubuo ng mga indibidwal na salita sa kasalukuyang linya ng command. Ang variable na ito ay magagamit lamang sa mga pag-andar ng shell na tinatawag ng mga programmable completion facility (tingnan ang Programmable Completion sa ibaba).

DIRSTACK

Isang array variable (tingnan ang Mga Array sa ibaba) na naglalaman ng mga kasalukuyang nilalaman ng direktoryo ng stack. Lumilitaw ang mga direktoryo sa stack sa pagkakasunud-sunod na ipinapakita sa kanila ng dirs builtin. Ang pagtatalaga sa mga miyembro ng variable na ito ng array ay maaaring gamitin upang baguhin ang mga direktoryo na nasa stack, ngunit dapat gamitin ang mga pushd at popd builtin upang idagdag at alisin ang mga direktoryo. Ang assignment sa variable na ito ay hindi magbabago sa kasalukuyang direktoryo. Kung hindi naka- set ang DIRSTACK , nawala ang mga espesyal na katangian nito, kahit na pagkatapos ay i-reset ito.

EUID

Lumalawak sa epektibong user ID ng kasalukuyang gumagamit, na-initialize sa startup ng shell. Ang variable na ito ay readonly.

FUNCNAME

Ang pangalan ng anumang kasalukuyang pag-andar ng shell function. Ang variable na ito ay umiiral lamang kapag ang isang shell function ay Isinasagawa. Ang mga takdang-aralin sa FUNCNAME ay walang epekto at nagbabalik ng katayuan ng error. Kung wala ang FUNCNAME , nawawala ang mga espesyal na katangian nito, kahit na pagkatapos ay i-reset ito.

GROUPS

Isang array variable na naglalaman ng listahan ng mga grupo kung saan ang kasalukuyang gumagamit ay isang miyembro. Ang mga takdang-aralin sa GROUPS ay walang epekto at nagbabalik ng katayuan ng error. Kung ang mga GROUPS ay hindi naka-set, ito ay nawawalan ng mga espesyal na katangian nito, kahit na pagkatapos ay i-reset ito.

HISTCMD

Ang numero ng kasaysayan, o index sa listahan ng kasaysayan, ng kasalukuyang utos. Kung ang HISTCMD ay hindi naka- set , ito ay nawawalan ng mga espesyal na katangian nito, kahit na pagkatapos ay i-reset ito.

HOSTNAME

Awtomatikong nakatakda sa pangalan ng kasalukuyang host.

HOSTTYPE

Awtomatikong naka-set sa isang string na natatanging naglalarawan ng uri ng makina na kung saan ay isinasagawa ang bash . Ang default ay depende sa system.

LINENO

Sa bawat oras na ang parameter na ito ay isinangguni, ang shell ay nagpapalit ng isang decimal na numero na kumakatawan sa kasalukuyang sequential line number (nagsisimula sa 1) sa loob ng script o function. Kapag hindi sa isang script o function, ang halaga na pinalitan ay hindi garantisado na maging makabuluhan. Kung ang LINENO ay hindi naka- set , ito ay nawawalan ng mga espesyal na katangian nito, kahit na pagkatapos ay i-reset ito.

MACHTYPE

Awtomatikong nakatakda sa isang string na ganap na naglalarawan sa uri ng system kung saan isinusugal ng bash , sa standard na format ng cpu-kumpanya na sistema ng GNU. Ang default ay depende sa system.

OLDPWD

Ang nakaraang gumaganang direktoryo na itinakda ng cd command.

OPTARG

Ang halaga ng huling argumento ng opsyon na naproseso ng getopts builtin command (tingnan ang SHELL BUILTIN COMMANDS sa ibaba).

OPTIND

Ang index ng susunod na argument na naproseso ng getopts builtin command (tingnan ang SHELL BUILTIN COMMANDS sa ibaba).

OSTYPE

Awtomatikong itatakda sa isang string na naglalarawan sa operating system kung saan isinasagawa ng bash . Ang default ay depende sa system.

PIPESTATUS

Isang variable na array (tingnan ang Mga Array sa ibaba) na naglalaman ng isang listahan ng mga halaga ng exit status mula sa mga proseso sa pinaka-kamakailan-na-executed foreground na pipeline (na maaaring maglaman lamang ng isang command).

PPID

Ang proseso ng ID ng magulang ng shell. Ang variable na ito ay readonly.

PWD

Ang kasalukuyang gumaganang direktoryo na itinakda ng cd command.

RANDOM

Sa bawat oras na ang parameter na ito ay isinangguni, isang random na integer sa pagitan ng 0 at 32767 ay nabuo. Ang pagkakasunud-sunod ng mga random na numero ay maaaring magsimula sa pamamagitan ng pagtatalaga ng isang halaga sa RANDOM . Kung ang RANDOM ay hindi maitakda, nawalan ng mga espesyal na katangian nito, kahit na pagkatapos ay i-reset ito.

REPLY

Itakda sa linya ng pag-input na binasa ng readin na builtin command kapag walang mga argumento ang ibinibigay.

SECONDS

Sa bawat oras na ang parameter na ito ay isinangguni, ang bilang ng mga segundo dahil ang invocation ng shell ay ibinalik. Kung ang isang halaga ay itinalaga sa SECONDS , ang halaga na ibinalik sa kasunod na mga sanggunian ay ang bilang ng mga segundo mula sa takdang-aralin at ang halaga na itinalaga. Kung hindi maitakda ang SECONDS , nawala ang mga espesyal na katangian nito, kahit na pagkatapos ay i-reset ito.

SHELLOPTS

Isang listahan ng pinaghiwalay na colon na pinagana ng mga opsyon sa shell. Ang bawat salita sa listahan ay isang wastong argument para sa opsyon na -o sa hanay ng builtin command (tingnan ang SHELL BUILTIN COMMANDS sa ibaba). Ang mga pagpipilian na lumilitaw sa SHELLOPTS ay ang mga iniulat na sa pamamagitan ng set -o . Kung ang variable na ito ay nasa kapaligiran kapag nagsisimula ang bash , ang bawat pagpipilian ng shell sa listahan ay papaganahin bago basahin ang anumang mga file ng startup. Ang variable na ito ay read-only.

SHLVL

Incremented ng isa sa bawat oras ng isang pagkakataon ng bash ay nagsimula.

UID

Lumalawak sa user ID ng kasalukuyang gumagamit, na-initialize sa startup ng shell. Ang variable na ito ay readonly.

Ang mga sumusunod na variable ay ginagamit ng shell. Sa ilang mga kaso, ang bash ay nagtatalaga ng isang default na halaga sa isang variable; ang mga kasong ito ay nakasaad sa ibaba.

BASH_ENV

Kung ang parameter na ito ay naka-set kapag ang Bash ay nagsasagawa ng isang script ng shell, ang halaga nito ay binibigyang kahulugan bilang isang filename na naglalaman ng mga command upang magpasimula ng shell, tulad ng sa / /. Bashrc . Ang halaga ng BASH_ENV ay napapailalim sa expansion ng parameter, command substitution, at pagpapalawak ng aritmetika bago isalin bilang isang pangalan ng file. Hindi ginagamit ang PATH upang maghanap para sa nanggagaling na pangalan ng file.

CDPATH

Ang path ng paghahanap para sa cd command. Ito ay isang listahan na pinaghiwalay ng colon ng mga direktoryo kung saan ang shell ay naghahanap para sa mga patutunguhang direktoryo na tinukoy ng cd command. Ang halimbawang halaga ay ".: ~: / Usr".

COLUMNS

Ginamit ng piniling command na builtin upang matukoy ang lapad ng terminal kapag naglilista ng mga listahan ng pagpili. Awtomatikong nakatakda sa pagtanggap ng isang SIGWINCH.

MAGAGAMIT

Isang variable na array kung saan binabasa ng bash ang mga posibleng pagkumpleto na binuo ng isang function ng shell na sinasabing ng programmable completion facility (tingnan ang Programmable Completion sa ibaba).

FCEDIT

Ang default na editor para sa fc builtin command.

FIGNORE

Isang listahan ng mga suffix na pinaghihiwalay ng colon upang huwag pansinin kapag gumaganap ang filename completion (tingnan ang READLINE sa ibaba). Ang isang filename na ang suffix ay tumutugma sa isa sa mga entry sa FIGNORE ay ibinukod mula sa listahan ng mga naitugmang filename. Ang halimbawang halaga ay ".o: ~".

GLOBIGNORE

Ang isang listahan na pinaghihiwalay ng colon ng mga pattern na tumutukoy sa hanay ng mga filename na hindi papansinin sa pagpapalawak ng pathname. Kung ang isang filename na naitugma sa pamamagitan ng isang pathname expansion pattern ay tumutugma sa isa sa mga pattern sa GLOBIGNORE , ito ay aalisin mula sa listahan ng mga tugma.

HISTCONTROL

Kung nakatakda sa isang halaga ng ignorespace , ang mga linya na nagsisimula sa isang character na espasyo ay hindi ipinasok sa listahan ng kasaysayan. Kung nakatakda sa isang halaga ng mga hindi pinapansin , ang mga linya na tumutugma sa huling linya ng kasaysayan ay hindi ipinasok. Ang halaga ng ignoreboth ay pinagsasama ang dalawang pagpipilian. Kung hindi naka-set, o kung nakatakda sa anumang ibang halaga kaysa sa itaas, lahat ng mga linya na binabasa ng parser ay naka-save sa listahan ng kasaysayan, napapailalim sa halaga ng HISTIGNORE . Ang function ng variable na ito ay pinalitan ng HISTIGNORE . Ang pangalawang at kasunod na mga linya ng isang command na multi-line compound ay hindi sinubok, at idinagdag sa kasaysayan anuman ang halaga ng HISTCONTROL .

KITA

Ang pangalan ng file kung saan ang kasaysayan ng command ay naka-save (tingnan ang KASAYSAYAN sa ibaba). Ang default na halaga ay ~ / . Bash_history . Kung hindi naka-set, ang kasaysayan ng command ay hindi naka-save kapag lumabas ang isang interactive shell.

HISTFILESIZE

Ang maximum na bilang ng mga linya na nakapaloob sa file ng kasaysayan. Kapag ang variable na ito ay bibigyan ng halaga, ang file ng kasaysayan ay pinutol, kung kinakailangan, upang maglaman ng hindi hihigit sa bilang ng mga linya. Ang default na halaga ay 500. Ang file ng kasaysayan ay pinutol rin sa laki na ito pagkatapos na isulat ito kapag lumabas ang isang interactive shell.

HISTIGNORE

Ang isang listahan na pinaghihiwalay ng colon ng mga pattern na ginagamit upang magpasya kung aling mga command line ang dapat i-save sa listahan ng kasaysayan. Ang bawat pattern ay naka-angkop sa simula ng linya at dapat tumugma sa kumpletong linya (walang implicit ` * 'ay nakadugtong). Ang bawat pattern ay nasubok laban sa linya matapos ang mga tseke na tinukoy ng HISTCONTROL ay inilalapat. Bilang karagdagan sa normal na pattern ng pagtutugma ng pattern ng shell, ang ` & 'ay tumutugma sa nakaraang linya ng kasaysayan. ` at 'ay maaaring escaped gamit ang isang backslash; ang backslash ay aalisin bago subukan ang isang tugma. Ang pangalawang at kasunod na mga linya ng isang command ng multi-line compound ay hindi sinubok, at idinagdag sa kasaysayan anuman ang halaga ng HISTIGNORE .

HISTSIZE

Ang bilang ng mga utos na dapat tandaan sa kasaysayan ng command (tingnan ang KASAYSAYAN sa ibaba). Ang default na halaga ay 500.

HOME

Ang home directory ng kasalukuyang gumagamit; ang default argument para sa cd builtin command. Ang halaga ng variable na ito ay ginagamit din kapag nagsasagawa ng pagpapalawak ng tilde.

HOSTFILE

Naglalaman ng pangalan ng isang file sa parehong format ng / etc / host na dapat basahin kapag ang shell ay kailangang kumpletuhin ang isang hostname. Ang listahan ng mga posibleng pagkumpleto ng hostname ay maaaring mabago habang tumatakbo ang shell; Ang susunod na pagkumpleto ng hostname ay sinubukan pagkatapos na mabago ang halaga, ang bash ay nagdaragdag ng mga nilalaman ng bagong file sa umiiral na listahan. Kung ang HOSTFILE ay nakatakda, ngunit walang halaga, ang mga pagtatangka upang mabasa ang / etc / hosts upang makakuha ng listahan ng posibleng mga pagkumpleto ng hostname. Kapag hindi naka- set ang HOSTFILE , inaalis ang listahan ng hostname.

IFS

Ang Internal Field Separator na ginagamit para sa pagbasbas ng salita pagkatapos ng pagpapalawak at upang paghiwalayin ang mga linya sa mga salita sa readin na builtin command. Ang default na halaga ay `` ''.

IGNOREEOF

Kinokontrol ang pagkilos ng isang interactive na shell sa pagtanggap ng isang EOF character bilang ang nag-iisang input. Kung nakatakda, ang halaga ay ang bilang ng magkakasunod na mga character na EOF na dapat na ma-type bilang mga unang character sa isang input line bago ang mga labasan ng bash . Kung ang variable ay umiiral ngunit walang numeric value, o walang halaga, ang default na halaga ay 10. Kung wala ito, ang EOF ay nagpapahiwatig ng pagtatapos ng input sa shell.

INPUTRC

Ang filename para sa startup file ng readline , pinapalitan ang default ng ~ / .inputrc (tingnan ang READLINE sa ibaba).

LANG

Ginamit upang matukoy ang kategoryang lokal para sa anumang kategorya na hindi partikular na napili sa isang variable na nagsisimula sa LC_ .

LC_ALL

Binabago ng variable na ito ang halaga ng LANG at anumang iba pang LC_ variable na tumutukoy sa kategorya ng locale.

LC_COLLATE

Tinutukoy ng variable na ito ang pagkakasunud-sunod ng paghahambing na ginagamit kapag pinagsasama-sama ang mga resulta ng pagpapalawak ng pathname, at tinutukoy ang pag-uugali ng mga ekspresyon ng hanay, mga klase ng pagkapantay, at mga pagkakasunod-sunod ng pag-collate sa loob ng pagpapalawak ng pathname at pagtutugma ng pattern.

LC_CTYPE

Tinutukoy ng variable na ito ang interpretasyon ng mga character at pag-uugali ng mga klase ng character sa loob ng pagpapalawak ng pathname at pagtutugma ng pattern.

LC_MESSAGES

Tinutukoy ng variable na ito ang locale na ginamit upang isalin ang mga double-quoted na string na sinundan ng isang $ .

LC_NUMERIC

Tinutukoy ng variable na ito ang kategorya ng lokal na ginagamit para sa pag-format ng numero.

MGA LINES

Ginamit ng piniling builtin command upang matukoy ang haba ng haligi para sa mga listahan ng pagpili ng pag-print. Awtomatikong nakatakda sa pagtanggap ng isang SIGWINCH.

MAIL

Kung ang parameter na ito ay naka-set sa isang pangalan ng file at hindi naka-set ang variable ng MAILPATH, ipinapahayag ng bash ang user ng pagdating ng mail sa tinukoy na file.

MAILCHECK

Tinutukoy kung gaano kadalas (sa ilang mga segundo) ang mga tseke ng bash para sa mail. Ang default ay 60 segundo. Kapag oras na upang suriin para sa mail, ang shell ay kaya bago ipakita ang pangunahing prompt. Kung ang variable na ito ay hindi naka-set, o nakatakda sa isang halaga na hindi isang bilang na mas malaki kaysa sa o katumbas ng zero, hindi pinapagana ng shell ang mail checking.

MAILPATH

Ang isang listahan na pinaghihiwalay ng colon ng mga pangalan ng file na siniyasat para sa mail. Ang mensahe na ipi-print kapag dumating ang mail sa isang partikular na file ay maaaring tinukoy sa pamamagitan ng paghihiwalay sa pangalan ng file mula sa mensahe na may `? '. Kapag ginamit sa teksto ng mensahe, $ _ nagpapalawak sa pangalan ng kasalukuyang mailfile. Halimbawa:

MAILPATH = '/ var / mail / bfox? Mayroon kang mail ": ~ / shell-mail?" $ _ Ay may mail! "'

Nagbibigay ang Bash ng default na halaga para sa variable na ito, ngunit ang lokasyon ng mga file ng user mail na ginagamit nito ay depende sa system (hal., / Var / mail / $ USER ).

OPTERR

Kung naka-set sa value 1, ang bash ay nagpapakita ng mga mensahe ng error na binuo ng getopts builtin command (tingnan ang SHELL BUILTIN COMMANDS sa ibaba). Ang OPTERR ay sinimulan sa 1 sa bawat oras na ang shell ay mahihingi o isang shell script ay pinaandar.

PATH

Ang path ng paghahanap para sa mga utos. Ito ay isang listahan ng mga colon-separated na direktoryo na kung saan ang shell ay naghahanap ng mga utos (tingnan ang COMMAND EXECUTION sa ibaba). Ang default path ay depende sa system, at itinakda ng administrator na nag-install ng bash . Ang karaniwang halaga ay `` / usr / gnu / bin: / usr / local / bin: / usr / ucb: / bin: / usr / bin:. ''.

POSIXLY_CORRECT

Kung ang variable na ito ay nasa kapaligiran kapag nagsisimula ang bash , ang shell ay pumasok sa posix mode bago binabasa ang mga file ng startup, na parang ang opsyon sa - opix na pangsupok ay ibinigay. Kung ito ay naka-set habang ang shell ay tumatakbo, ang bash ay nagbibigay-daan sa posix mode , kung ang command set -o posix ay naisakatuparan.

PROMPT_COMMAND

Kung nakatakda, ang halaga ay isinasagawa bilang isang utos bago mag-isyu ng bawat pangunahing prompt.

PS1

Ang halaga ng parameter na ito ay pinalawak (tingnan ang PROMPTING sa ibaba) at ginamit bilang pangunahing prompt string. Ang default na halaga ay `` \ s- \ v \ $ ''.

PS2

Ang halaga ng parameter na ito ay pinalawak na tulad ng sa PS1 at ginagamit bilang pangalawang prompt string. Ang default ay `` > ''.

PS3

Ang halaga ng parameter na ito ay ginagamit bilang prompt para sa piliin ang command (tingnan ang SHELL GRAMMAR sa itaas).

PS4

Ang halaga ng parameter na ito ay pinalawak na tulad ng sa PS1 at ang halaga ay naka-print bago ang bawat command bash ipinapakita sa panahon ng isang pagsubaybay trace. Ang unang karakter ng PS4 ay kinopya nang maraming beses, kung kinakailangan, upang ipahiwatig ang maraming mga antas ng indirection. Ang default ay `` + ''.

TIMEFORMAT

Ang halaga ng parameter na ito ay ginagamit bilang isang format na string na tumutukoy kung paano ang impormasyon ng pag-time para sa mga pipelines na prefix na may oras na nakalaan na salita ay dapat na ipapakita. Ang % na karakter ay nagpapakilala ng pagkakasunod-sunod ng pagtakas na pinalawak sa isang halaga ng oras o iba pang impormasyon. Ang mga pagkakasunod-sunod ng pagtakas at ang kanilang mga kahulugan ay ang mga sumusunod; ang mga brace ay tumutukoy sa mga opsyonal na bahagi.

%%

Isang literal na % .

% [ p ] [l] R

Ang lumipas na oras sa ilang segundo.

% [ p ] [l] U

Ang bilang ng mga CPU na segundo na ginugol sa user mode.

% [ p ] [l] S

Ang bilang ng mga CPU na segundo na ginugol sa mode ng system.

% P

Ang porsyento ng CPU, na nakalkula bilang (% U +% S) /% R.

Ang opsyonal p ay isang digit na tumutukoy sa katumpakan , ang bilang ng mga praksyonal na mga digit pagkatapos ng isang decimal point. Ang isang halaga ng 0 ay nagiging sanhi ng walang decimal point o bahagi upang maging output. Sa pinakamalawak na tatlong lugar pagkatapos matukoy ang decimal point; Ang mga halaga ng p na mas malaki sa 3 ay nabago sa 3. Kung hindi tinukoy ang p , ang halaga na 3 ay ginagamit.

Ang opsyonal na l ay tumutukoy sa isang mas mahabang format, kabilang ang mga minuto, ng MM MM form. FF s. Ang halaga ng p ay tumutukoy sa kung o hindi ang bahagi ay kasama.

Kung ang variable na ito ay hindi naka-set, ang bash ay gumaganap na kung ito ay may halagang $ '\ nreal \ t% 3lR \ nuser \ t% 3lU \ nsys% 3lS' . Kung ang halaga ay null, walang impormasyon sa pag-time ay ipinapakita. Ang isang trailing newline ay idinagdag kapag ang format na string ay ipinapakita.

TMOUT

Kung nakatakda sa isang halaga na higit sa zero, ang TMOUT ay itinuturing bilang default na timeout para sa readin na builtin. Tinatapos ang piliin na utos kung ang input ay hindi dumating pagkatapos ng mga segundo ng TMOUT kapag ang input ay nagmumula sa isang terminal. Sa isang interactive na shell, ang halaga ay binibigyang kahulugan bilang ang bilang ng mga segundo upang maghintay para sa input pagkatapos mag-isyu ng pangunahing prompt. Tinatapos ni Bash pagkatapos maghintay ng ilang segundo kung hindi dumating ang pag-input.

auto_resume

Kinokontrol ng variable na ito kung paano nakikipag-ugnayan ang shell sa user at kontrol ng trabaho. Kung ang hanay na ito ay naka-set, ang isang solong salita simpleng mga utos na walang redirections ay itinuturing bilang mga kandidato para sa pagpapatuloy ng isang umiiral na tumigil sa trabaho. Walang pinapayagang kalabuan; kung mayroong higit sa isang trabaho na nagsisimula sa string type, napili ang trabaho na pinakahuli kamakailan. Ang pangalan ng isang tumigil na trabaho, sa ganitong konteksto, ay ang command line na ginamit upang simulan ito. Kung nakatakda sa eksaktong halaga, ang string na ibinigay ay dapat tumugma sa pangalan ng isang natigil na trabaho nang eksakto; kung naka-set sa substring , ang string na ibinigay na kinakailangan upang tumugma sa isang substring ng pangalan ng isang tumigil sa trabaho. Ang halaga ng substring ay nagbibigay ng pag-andar kahawig sa %? identifier ng trabaho (tingnan ang KONTROL ng trabaho sa ibaba). Kung nakatakda sa anumang iba pang halaga, ang ibinigay na string ay dapat na isang prefix ng pangalan ng nahinto na trabaho; Nagbibigay ito ng pag-andar na kahawig sa % identifier ng trabaho.

histchars

Ang dalawa o tatlong mga character na kumokontrol sa pagpapalawak ng kasaysayan at pag-token (tingnan ang EXPANSION ng KASAYSAYAN sa ibaba). Ang unang karakter ay ang pagpapalawak ng character ng kasaysayan , ang character na nagpapahiwatig ng pagsisimula ng pagpapalawak ng kasaysayan, normal ` ! '. Ang ikalawang character ay ang mabilis na substitusyon ng pagpapalit , na ginagamit bilang patindig para sa muling pagpapatakbo ng naunang utos na ipinasok, na binubuo ng isang string para sa isa pa sa utos. Ang default ay ` ^ '. Ang opsyonal na pangatlong character ay ang character na nagpapahiwatig na ang natitira sa linya ay isang komento kapag natagpuan bilang unang karakter ng isang salita, karaniwang ` # '. Ang komento ng character ng kasaysayan ay nagiging sanhi ng pagpapalit ng kasaysayan upang lumaktaw para sa natitirang mga salita sa linya. Hindi ito kinakailangang maging sanhi ng shell parser na gamutin ang natitirang linya bilang isang komento.

Mga Arrays

Nagbibigay ang Bash ng isa-dimensional na mga variable ng array. Anumang variable ay maaaring gamitin bilang isang array; ang ipinapahayag na builtin ay tahasang ipinapahayag ang isang array. Walang pinakamataas na limitasyon sa laki ng isang array, o anumang kinakailangan na ma-index o itinalaga ng mga miyembro nang magkadikit. Ang mga array ay naka-index gamit ang integer at zero-based.

Isang array ay awtomatikong nilikha kung ang anumang variable ay nakatalaga sa paggamit ng pangalan ng syntax [ subscript ] = value . Ang subscript ay itinuturing bilang isang aritmetika expression na dapat suriin sa isang bilang na mas malaki kaysa sa o katumbas ng zero. Upang tahasang ipahayag ang isang array, gamitin ang magpahayag-isang pangalan (tingnan ang SHELL BUILTIN COMMANDS sa ibaba). ipinapahayag-isang pangalan [ subscript ] ay tinatanggap din; binabalewala ang subscript . Ang mga attribute ay maaaring tinukoy para sa isang array variable gamit ang ipinapahayag at readinly builtins. Nalalapat ang bawat katangian sa lahat ng mga miyembro ng isang array.

Ang mga arrays ay nakatalaga sa paggamit ng mga takdang pinagsama ng pangalan ng form = ( halaga 1 ... halaga n ) , kung saan ang bawat halaga ay nasa form [ subscript ] = string . Kinakailangan lamang ang string . Kung ang mga opsyonal na mga bracket at subscript ay ibinibigay, ang index na iyon ay nakatalaga sa; kung hindi man ang index ng sangkap na itinalaga ay ang huling index na nakatalaga sa pahayag kasama ang isa. Nagsisimula ang pag-index sa zero. Ang syntax na ito ay tinatanggap din ng ipinahayag na builtin. Ang indibidwal na elemento ng array ay maaaring italaga sa paggamit ng pangalan [ subscript ] = syntax ng halaga na ipinakilala sa itaas.

Ang unset builtin ay ginagamit upang sirain ang arrays. Ang unset na pangalan [ subscript ] ay sumisira sa array element sa index subscript . unset na pangalan , kung saan ang pangalan ay isang array, o i- unset na pangalan [ subscript ], kung saan ang subscript ay * o @ , inaalis ang buong array.

Ang mga ipinapahayag , lokal , at mga readinly builtins ay tumatanggap ng isang -a opsyon upang tukuyin ang isang array. Ang readin builtin ay tumatanggap ng isang -a option upang magtalaga ng isang listahan ng mga salita na binasa mula sa karaniwang input sa isang array. Itakda at ipahayag ang builtins na nagpapakita ng mga halaga ng hanay sa isang paraan na nagpapahintulot sa kanila na muling magamit bilang mga takdang-aralin.

EXPANSION

Ang pagpapalawak ay ginagawa sa linya ng command pagkatapos na ito ay nahati sa mga salita. Mayroong pitong uri ng pagpapalawak na ginanap: pagpapalawak ng tustahin , pagpapalawak ng tilde , parameter at variable na pagpapalawak , pagpapalit ng utos , pagpapalawak ng aritmetika , pagbaba ng salita , at pagpapalawak ng pathname .

Ang pagkakasunud-sunod ng mga pagpapalawak ay: pagpapalawak ng pagpapalawak, pagpapalawak ng tilde, parameter, variable at pagpapalawak ng aritmetika at pagpapalit ng utos (ginawa sa isang kaliwa-hanggang-kanan na paraan), pagbaba ng salita, at pagpapalawak ng pathname.

Sa mga sistema na maaaring suportahan ito, may karagdagang pagpapalawak na magagamit: proseso ng pagpapalit .

Pagpapalawak ng Brace

Pagpapalawak ng brace ay isang mekanismo kung saan maaaring mabuo ang mga di-makatwirang mga string. Ang mekanismong ito ay katulad ng pagpapalawak ng pathname , ngunit hindi kailangang umiiral ang mga filename na binuo. Ang mga pattern na pinalawak na pinalawak ay isang anyo ng isang opsyonal na paunang salita , na sinusundan ng isang serye ng mga string na pinaghiwalay ng kuwit sa pagitan ng isang pares ng mga brace, na sinusundan ng isang opsyonal na mga sulat-kamay . Ang preamble ay prefix sa bawat string na nakapaloob sa loob ng tirante, at ang mga sulat-kamay ay pagkatapos ay idinadagdag sa bawat resultang string, pagpapalawak sa kaliwa papunta sa kanan.

Maaaring ma-nested ang mga expansion ng brace. Ang mga resulta ng bawat pinalawak na string ay hindi pinagsunod-sunod; Ang natitira sa tamang pagkakasunud-sunod ay napanatili. Halimbawa, ang isang { d, c, b } e ay nagpapalawak sa `ade ace abe '.

Ang pagpapalawak ng brace ay ginaganap bago ang anumang iba pang pagpapalawak, at anumang mga character na espesyal sa iba pang mga expansions ay napanatili sa resulta. Ito ay mahigpit na tekstuwal. Hindi inilalapat ni Bash ang anumang sintaktikong interpretasyon sa konteksto ng paglawak o ang teksto sa pagitan ng mga tirante.

Ang construct na ito ay karaniwang ginagamit bilang patindig kapag ang mga karaniwang prefix ng mga string na nabuo ay mas mahaba kaysa sa halimbawa sa itaas:

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

o

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

Ang pagpapalawak ng brace ay nagpapakilala ng bahagyang hindi pagkakatugma sa mga makasaysayang bersyon ng sh . sh ay hindi tinatrato ang pagbukas o pagsasara ng mga brace lalo na kapag lumitaw sila bilang bahagi ng isang salita, at pinapanatili ang mga ito sa output. Inalis ni Bash ang mga tirante mula sa mga salita bilang resulta ng pagpapalawak ng suhay. Halimbawa, ang isang salita na ipinasok sa sh bilang file {1,2} ay lilitaw nang magkatulad sa output. Ang parehong salita ay output bilang file1 file2 matapos ang pagpapalawak ng bash . Kung ang mahigpit na pagkakatugma sa sh ay ninanais, simulan ang bash gamit ang pagpipilian sa B + o huwag paganahin ang pagpapalawak ng pagpapalawak sa pagpipilian sa B sa hanay ng command (tingnan ang SHELL BUILTIN COMMANDS sa ibaba).

Pagpapalawak ng Tilde

Kung ang isang salita ay nagsisimula sa isang hindi nakilalang tilde na karakter (` ~ '), ang lahat ng mga karakter na nauna sa unang hindi nabanggit na slash (o lahat ng mga character, kung walang walang marka na slash) ay itinuturing na isang tilde na prefix . Kung wala sa mga character sa tilde-prefix ang naka-quote, ang mga character sa tilde-prefix sumusunod na tilde ay itinuturing bilang isang posibleng pangalan sa pag-login . Kung ang pangalan ng pag-login ay ang null string, ang tilde ay pinalitan ng halaga ng shell parameter HOME . Kung ang HOME ay hindi naka-set, ang direktoryo ng home ng user na nagpapatupad ng shell ay pinalitan sa halip. Kung hindi, ang tilde-prefix ay pinalitan ng direktoryo ng bahay na nauugnay sa tinukoy na pangalan ng pag-login.

Kung ang tilde-prefix ay isang `~ + ', ang halaga ng shell variable na PWD ay pumapalit sa tilde-prefix. Kung ang tilde-prefix ay isang `~ - ', ang halaga ng variable ng shell OLDPWD , kung nakatakda ito, ay pinalitan. Kung ang mga character na sumusunod sa tilde sa tilde-prefix ay binubuo ng isang numero N , na opsyonal na prefix ng isang `+ 'o isang` -', ang tilde-prefix ay pinalitan ng kaukulang elemento mula sa directory stack, dahil ipapakita ito sa pamamagitan ng dirs builtin mahihingi sa tilde-prefix bilang isang argumento. Kung ang mga character na sumusunod sa tilde sa tilde-prefix ay binubuo ng isang numero na walang nangungunang `+ 'o` -', `+ 'ay ipinapalagay.

Kung ang pangalan ng pag-login ay hindi wasto, o nabigo ang pagpapalawak ng tilde, ang salita ay hindi nagbabago.

Ang bawat assignment ng variable ay sinuri para sa hindi nabanggit na tilde-prefix na agad sumusunod sa isang : o = . Sa mga kasong ito, ang pagpapalawak ng tilde ay ginaganap rin. Dahil dito, maaaring gamitin ng isa ang mga pangalan ng file na may mga tilde sa mga takdang-aralin sa PATH , MAILPATH , at CDPATH , at ang shell ay nagtatalaga ng pinalawak na halaga.

Pagpapalawak ng Parameter

Ang ` $ 'na character ay nagpapakilala ng pagpapalawak ng parameter, pagpapalit ng utos, o pagpapalawak ng aritmetika. Ang parameter na pangalan o simbolo na pinalawak ay maaaring nakapaloob sa mga tirante, na kung saan ay opsyonal ngunit naglilingkod upang protektahan ang variable na mapalawak mula sa mga character na kaagad sumusunod dito na maaaring ipakahulugan bilang bahagi ng pangalan.

Kapag ang mga brace ay ginagamit, ang pagtutugma ng pagtatapos na brace ay ang unang ` } 'hindi nakaligtaan sa pamamagitan ng isang backslash o sa loob ng naka-quote na string, at hindi sa loob ng isang naka-embed na palugit na aritmetika, command substitution, o pagpapalaki ng paramter.

Ang halaga ng parameter ay pinalitan. Ang mga tirante ay kinakailangan kapag ang parameter ay positional na parameter na may higit sa isang digit, o kapag ang parameter ay sinundan ng isang character na hindi dapat ipakahulugan bilang bahagi ng pangalan nito.

Sa bawat isa sa mga kaso sa ibaba, ang salita ay napapailalim sa pagpapalawak ng tilde, pagpapalawak ng parameter, pagpapalit ng utos, at pagpapalawak ng aritmetika. Kapag hindi nagsasagawa ng pagpapalawak ng substring, ang mga pagsubok para sa bash para sa isang parameter na hindi naka-unset o null; Ang pag-iwas sa mga resulta ng colon sa isang pagsubok lamang para sa isang parameter na hindi naka-set.

Gamitin ang Mga Default na Halaga . Kung ang parameter ay hindi naka-unset o null, ang pagpapalawak ng salita ay pinalitan. Kung hindi man, ang halaga ng parameter ay pinalitan.

Magtalaga ng Default na Mga Halaga . Kung ang parameter ay hindi naka-unset o null, ang pagpapalawak ng salita ay nakatalaga sa parameter . Pagkatapos ay binago ang halaga ng parameter . Ang mga posisyong parameter at mga espesyal na parameter ay hindi maaaring italaga sa ganitong paraan.

Ipakita ang Error kung Null o I-unset . Kung ang parameter ay null o hindi naka-set, ang pagpapalawak ng salita (o isang mensahe na may epekto kung ang salita ay hindi naroroon) ay isinulat sa karaniwang error at ang shell, kung hindi ito interactive, labasan. Kung hindi man, ang halaga ng parameter ay pinalitan.

Gumamit ng Kahaliling Halaga . Kung ang parameter ay null o hindi maitakda, walang pinalitan, kung hindi, ang pagpapalawak ng salita ay pinalitan.

Lumalawak sa mga pangalan ng mga variable na ang mga pangalan ay nagsisimula sa prefix , na pinaghihiwalay ng unang karakter ng espesyal na variable ng IFS .

Ang haba sa mga character ng halaga ng parameter ay pinalitan. Kung ang parameter ay * o @ , ang halaga na pinalitan ay ang bilang ng positional parameter. Kung ang parameter ay isang array na pangalan na subscripted ng * o @ , ang halaga na pinalitan ay ang bilang ng mga elemento sa array.

Ang salita ay pinalawak upang makabuo ng isang pattern tulad ng sa expansion pathname. Kung ang pattern ay tumutugma sa simula ng halaga ng parameter , pagkatapos ang resulta ng pagpapalawak ay ang pinalawak na halaga ng parameter sa pinakamaikling pagtutugma pattern (ang `` # '' kaso) o ang pinakamahabang pattern ng pagtutugma (ang `` # # ' 'kaso) tinanggal. Kung ang parameter ay @ o * , ang pagpapatupad ng pag-alis ng pattern ay inilalapat sa bawat posisyong parameter sa pagliko, at ang pagpapalawak ay ang nanggagaling na listahan. Kung ang parameter ay isang array variable na subscripted sa @ o * , ang pagpapatupad ng pag-alis ng pattern ay inilalapat sa bawat miyembro ng array sa pagliko, at ang paglawak ay ang nanggagaling na listahan.

Ang salita ay pinalawak upang makabuo ng isang pattern tulad ng sa expansion pathname. Kung ang pattern ay tumutugma sa isang trailing na bahagi ng pinalawak na halaga ng parameter , pagkatapos ang resulta ng pagpapalawak ay ang pinalawak na halaga ng parameter na may pinakamaikling pagtutugma pattern (ang `` % '' kaso) o ang pinakamahabang pattern sa pagtutugma (ang `` % % '' case) tinanggal. Kung ang parameter ay @ o * , ang pagpapatupad ng pag-alis ng pattern ay inilalapat sa bawat posisyong parameter sa pagliko, at ang pagpapalawak ay ang nanggagaling na listahan. Kung ang parameter ay isang array variable na subscripted sa @ o * , ang pagpapatupad ng pag-alis ng pattern ay inilalapat sa bawat miyembro ng array sa pagliko, at ang paglawak ay ang nanggagaling na listahan.

Ang pattern ay pinalawak upang makabuo ng isang pattern tulad ng sa expansion pathname. Ang parametro ay pinalawak at ang pinakamahabang pagtutugma ng pattern laban sa halaga nito ay pinalitan ng string . Sa unang form, tanging ang unang tugma ay papalitan. Ang ikalawang anyo ay nagiging sanhi ng lahat ng mga tugma ng pattern upang mapalitan ng string . Kung ang pattern ay nagsisimula sa # , dapat itong tumugma sa simula ng pinalawak na halaga ng parameter . Kung ang pattern ay nagsisimula sa % , dapat itong tumugma sa dulo ng pinalawak na halaga ng parameter . Kung ang string ay null, ang mga pagtutugma ng pattern ay tinanggal at ang / sumusunod na pattern ay maaaring tinanggal. Kung ang parameter ay @ o * , ang pagpapatakbo ng pagpapalit ay inilapat sa bawat posisyong parameter sa pagliko, at ang pagpapalawak ay ang nanggagaling na listahan. Kung ang parameter ay isang variable ng array na naka-subscript sa @ o * , ang pagpapatakbo ng pagpapalit ay inilalapat sa bawat miyembro ng array sa pagliko, at ang pagpapalawak ay ang nanggagaling na listahan.

Command Pagpapalit

Pinapahintulutan ng pagpapalit ng command ang output ng isang command upang palitan ang pangalan ng command. Mayroong dalawang anyo:

$ ( command )

o

` command`

Gumanap ng Bash ang pagpapalawak sa pamamagitan ng pagpapatupad ng command at pagpapalit ng command substitution na may standard na output ng command, na may anumang trailing newlines na tinanggal. Ang mga naka-embed na bagong linya ay hindi tinanggal, ngunit maaaring alisin ang mga ito sa pagbaba ng salita. Ang command na pagpapalit $ (cat file ) ay maaaring mapalitan ng katumbas ngunit mas mabilis $ (< file ).

Kapag ginamit ang paraan ng lumang-style na backquote ng pagpapalit, ang backslash ay nananatiling literal na kahulugan nito maliban kapag sinundan ng $ , ` , o \ . Ang unang backquote na hindi nauna sa pamamagitan ng isang backslash tinatapos ang pagpapalit ng utos. Kapag ginagamit ang $ ( command ) form, ang lahat ng mga character sa pagitan ng mga panaklong ay bumubuo sa utos; walang espesyal na itinuturing.

Maaaring ma-nested ang mga pamalit na command. Sa pugad kapag ginagamit ang backquoted form, makatakas sa panloob na backquotes sa backslashes.

Kung ang pagpapalit ay lumilitaw sa loob ng double quotes, ang pagbaba ng salita at pagpapalawak ng pathname ay hindi gumanap sa mga resulta.

Pagpapalawak ng Aritmetika

Ang pagpapalawak ng aritmetika ay nagpapahintulot sa pagsusuri ng isang aritmetika na expression at ang pagpapalit ng resulta. Ang format para sa pagpapalawak ng aritmetika ay:

$ (( pagpapahayag ))

Ang expression ay itinuturing na kung ito ay sa loob ng double quotes, ngunit ang isang double quote sa loob ng mga panaklong ay hindi ginagamot lalo na. Ang lahat ng mga token sa ekspresyon ay dumaranas ng pagpapalawak ng parameter, pagpapalawak ng string, pagpapalit ng utos, at pagtanggal ng quote. Ang mga pamalit ng aritmetika ay maaaring nakapugad.

Ang pagsusuri ay ginaganap ayon sa mga panuntunang nakalista sa ibaba sa ilalim ng ARITHMETIC EVALUATION . Kung ang pagpapahayag ay hindi wasto, ang mga bash ay nag- print ng isang mensaheng nagpapahiwatig ng kabiguan at walang nangyayari sa pagpapalit.

Proseso ng Pagpapalit

Ang proseso ng pagpapalit ay sinusuportahan sa mga sistema na sumusuporta sa pinangalanan na mga pipa ( FIFOs ) o ang / dev / fd na paraan ng pagbubukas ng mga file sa pagbubukas. Kinakailangan ang form ng <( listahan ) o > ( listahan ) . Ang proseso ng listahan ay tumakbo kasama ang input o output na konektado sa isang FIFO o ilang file sa / dev / fd . Ang pangalan ng file na ito ay naipasa bilang argumento sa kasalukuyang command bilang resulta ng pagpapalawak. Kung ang ginamit na form ( listahan ) , ang pagsusulat sa file ay magbibigay ng input para sa listahan . Kung ang form na <( listahan ) ay ginagamit, ang file na ipinasa bilang isang argument ay dapat basahin upang makakuha ng output ng listahan .

Kapag magagamit, ang pagpapalit ng proseso ay ginaganap nang sabay na may parameter at variable expansion, command substitution, at pagpapalawak ng aritmetika.

Split ng Salita

Sinusuri ng shell ang mga resulta ng pagpapalawak ng parameter, command substitution, at pagpapalawak ng aritmetika na hindi naganap sa loob ng double quotes para sa pagbiyak ng salita .

Tinatrato ng shell ang bawat katangian ng IFS bilang isang delimiter, at pinaghihiwa ang mga resulta ng iba pang mga expansion sa mga salita sa mga character na ito. Kung ang IFS ay hindi naka-set, o ang halaga nito ay eksaktong , ang default, pagkatapos ang anumang pagkakasunud-sunod ng mga character ng IFS ay naglilingkod upang limasin ang mga salita. Kung ang IFS ay may halaga maliban sa default, ang mga pagkakasunud-sunod ng mga space space ng mga whitespace at tab ay binabalewala sa simula at wakas ng salita, hangga't ang whitespace character ay nasa halaga ng IFS (isang IFS whitespace na character). Anumang karakter sa IFS na hindi IFS whitespace, kasama ang anumang katabi ng mga character na whitespace sa IFS , ay naghihiwalay sa isang field. Ang pagkakasunud-sunod ng mga character na whitespace ng IFS ay itinuturing din bilang isang delimiter. Kung ang halaga ng IFS ay null, walang nangyari ang pagbaba ng salita.

Ang mga explicit null arguments ( "" o '' ) ay mananatili. Ang mga hindi nakatalang implicit null arguments, na nagreresulta mula sa pagpapalawak ng mga parameter na walang mga halaga, ay aalisin. Kung ang isang parameter na walang halaga ay pinalawak sa loob ng double quotes, isang null argument na mga resulta at mananatili.

Tandaan na kung walang pagpapalawak na nangyayari, walang splitting ang gumanap.

Pagpapalawak ng Pathname

Pagkatapos ng pagbasbas ng salita, maliban kung ang set -f ay naitakda, ang bash ay ini- scan ang bawat salita para sa mga character * ,? , at [ . Kung ang isa sa mga character na ito ay lumilitaw, ang salita ay itinuturing bilang isang pattern , at pinalitan ng isang listahan ng mga listahan ng mga pangalan ng file ayon sa alpabeto na tumutugma sa pattern. Kung walang tumutugmang mga pangalan ng file ay natagpuan, at ang opsyon na nullglob ng shell ay hindi pinagana, ang salita ay naiwang hindi nabago. Kung ang pagpipilian ng nullglob ay nakatakda, at walang mga tugma ay natagpuan, ang salita ay aalisin. Kung pinagana ang opsyon na nocaseglob ng shell, ang tugma ay ginaganap nang walang pagsasaalang-alang sa kaso ng mga alpabetikong character. Kapag ang isang pattern ay ginagamit para sa pagpapalawak ng pathname, ang character na ``. '' ' Sa simula ng isang pangalan o kaagad na sumusunod sa isang slash ay dapat na maitugma nang malinaw, maliban kung ang set ng dotglob na shell ay nakatakda. Kapag tumutugma sa isang pathname, ang slash na character ay dapat laging maitugma nang malinaw. Sa ibang mga kaso, ang ``. '' 'Na karakter ay hindi ginagamot lalo na. Tingnan ang paglalarawan ng shopt sa ibaba sa ilalim ng SHELL BUILTIN COMMANDS para sa isang paglalarawan ng nocaseglob , nullglob , at dotglob shell opsyon.

Ang GLOBIGNORE shell variable ay maaaring gamitin upang paghigpitan ang hanay ng mga pangalan ng file na tumutugma sa isang pattern . Kung ang GLOBIGNORE ay nakatakda, ang bawat pagtutugma ng pangalan ng file na tumutugma din sa isa sa mga pattern sa GLOBIGNORE ay aalisin mula sa listahan ng mga tugma. Ang mga pangalan ng file na ``. '' At `` .. '' ay palaging binabalewala, kahit na naka -set ang GLOBIGNORE . Gayunpaman, ang setting ng GLOBIGNORE ay may epekto sa pag-enable sa opsyon na dotglob shell, kaya lahat ng iba pang mga pangalan ng file na nagsisimula sa isang ``. '' Ay tutugma. Upang makuha ang lumang pag-uugali ng pagwawalang mga pangalan ng file na nagsisimula sa isang ``. '' , Gawing ``. * '' Ang isa sa mga pattern sa GLOBIGNORE . Ang opsyon sa dotglob ay hindi pinagana kapag ang GLOBIGNORE ay hindi naka- set .

Pagtutugma ng Pattern

Ang anumang karakter na lumilitaw sa isang pattern, maliban sa mga espesyal na pattern ng mga character na inilarawan sa ibaba, tumutugma mismo. Ang NUL na karakter ay hindi maaaring mangyari sa isang pattern. Ang mga espesyal na pattern ng mga character ay dapat na naka-quote kung sila ay naitugmang literal.

Ang mga espesyal na pattern ng character ay may mga sumusunod na kahulugan:

*

Tumutugma sa anumang string, kabilang ang null string.

?

Tumutugma sa anumang solong character.

[...]

Tumutugma sa alinman sa mga nakapaloob na character. Ang isang pares ng mga character na pinaghihiwalay ng isang gitling ay nagpapahiwatig ng hanay na expression ; Ang anumang karakter na masama sa pagitan ng dalawang character na ito, kasama ang paggamit ng pagkakasunod-sunod ng collating at set ng kasalukuyang locale, ay naitugma. Kung ang unang karakter na sumusunod sa [ ay isang ! o isang ^ kung gayon ang anumang karakter na hindi nakapaloob ay naitugma. Ang pagkakasunud-sunod ng pag-uuri ng mga character sa mga ekspresyon ng hanay ay tinutukoy ng kasalukuyang locale at ang halaga ng LC_COLLATE shell variable, kung nakatakda. A - maaaring maitugma sa pamamagitan ng pagsama ito bilang una o huling character sa hanay. A ] ay maaaring maitugma sa pamamagitan ng pagsasama nito bilang unang character sa hanay.

Sa loob ng [ at ] , maaaring itukoy ang mga klase ng character gamit ang syntax [: class :] , kung saan ang klase ay isa sa mga sumusunod na klase na tinukoy sa pamantayan ng POSIX.2:

alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
Ang isang klase ng character ay tumutugma sa anumang karakter na kabilang sa klase na iyon. Ang salita klase ng character ay tumutugma sa mga titik, numero, at ang character _.

Sa loob ng [ at ] , ang isang katumbas na klase ay maaaring tinukoy gamit ang syntax [= c =] , na tumutugma sa lahat ng mga character na may parehong timbang ng paghahambing (tulad ng tinukoy ng kasalukuyang locale) bilang character c .

Sa loob [ at ] , ang syntax [. simbolo .] tumutugma sa simbolo ng collating simbolo .

Kung ang opsyon na extglob shell ay pinapagana gamit ang built - in na shop , ang ilang pinalawig na pattern na tumutugma sa mga operator ay kinikilala. Sa sumusunod na paglalarawan, ang isang listahan ng pattern ay isang listahan ng isa o higit pang mga pattern na pinaghihiwalay ng isang | . Ang mga pattern ng komposisyon ay maaaring nabuo gamit ang isa o higit pa sa mga sumusunod na sub-pattern:

? ( pattern-list )

Tumutugma sa zero o isang pangyayari ng ibinigay na mga pattern

* ( pattern-list )

Tumutugma sa zero o higit pang mga pangyayari sa ibinigay na mga pattern

+ ( pattern-list )

Tumutugma sa isa o higit pang mga pangyayari ng ibinigay na mga pattern

@ ( pattern-list )

Tumutugma sa eksaktong isa sa ibinigay na mga pattern

! ( pattern-list )

Tumutugma sa anumang bagay maliban sa isa sa ibinigay na mga pattern

Pag-alis ng Quote

Pagkatapos ng mga naunang pagpapalawak, ang lahat ng hindi nabanggit na mga pangyayari ng mga character na \ , ' , at " na hindi resulta mula sa isa sa mga expansion sa itaas ay inalis.

PAGBABAGO

Bago mai-execute ang isang utos, maaaring ma- redirect ang input at output gamit ang isang espesyal na notasyon na binibigyang kahulugan ng shell. Maaaring gamitin din ang pag-redirect upang buksan at isara ang mga file para sa kasalukuyang kapaligiran ng pagpapatupad ng shell. Ang mga sumusunod na mga operator ng redirection ay maaaring mauna o lumitaw saanman sa loob ng isang simpleng utos o maaaring sundin ang isang utos . Ang mga redirect ay naproseso sa pagkakasunud-sunod na lilitaw, mula kaliwa hanggang kanan.

Sa mga sumusunod na paglalarawan, kung ang numero ng file descriptor ay tinanggal, at ang unang karakter ng operator ng pag-redirect ay < , ang pag-redirect ay tumutukoy sa karaniwang input (file descriptor 0). Kung ang unang karakter ng operator ng pag-redirect ay > , ang redirection ay tumutukoy sa karaniwang output (file descriptor 1).

Ang salitang sumusunod sa operator ng pag-redirect sa mga sumusunod na paglalarawan, maliban kung nabanggit, ay pinapailalim sa pagpapalawak, pagpapalawak ng tilde, pagpapalawak ng parameter, pagpapalit ng utos, pagpapalawak ng aritmetika, pag-alis ng pag-quote, pagpapalawak ng pathname, at pagbiyak ng salita. Kung lumalawak ito sa higit sa isang salita, ang mga ulat ay may error.

Tandaan na ang pagkakasunud-sunod ng mga redirect ay mahalaga. Halimbawa, ang utos

ls > dirlist 2 > & 1

pinapatnubayan ang parehong karaniwang output at karaniwang error sa file dirlist , habang ang command

ls 2 > & 1 > dirlist

ang namamahala lamang ang karaniwang output upang ma-file ang dirlist , dahil ang karaniwang error ay doble na bilang karaniwang output bago ang karaniwang output ay na-redirect sa dirlist .

Hinahawakan ng Bash ang ilang mga filename lalo na kapag ginagamit ang mga ito sa mga redirect, tulad ng inilarawan sa sumusunod na talahanayan:

/ dev / fd / fd

Kung ang fd ay isang balidong integer, ang file descriptor fd ay nadoble.

/ dev / stdin

Nadadoble ang descriptor ng file 0.

/ dev / stdout

Nadadoble ang paglalarawan ng file descriptor 1.

/ dev / stderr

Ang tagapaglarawan ng file 2 ay doble.

/ dev / tcp / host / port

Kung ang host ay isang wastong hostname o address ng Internet, at ang port ay isang numero ng integer port o pangalan ng serbisyo, ang mga pagtatangka ay magbubukas ng koneksyon sa TCP sa kaukulang socket.

/ dev / udp / host / port

Kung ang host ay isang wastong hostname o address ng Internet, at ang port ay isang numero ng integer port o pangalan ng serbisyo, ang mga pagtatangka upang buksan ang isang koneksyon sa UDP sa kaukulang socket.

Ang pagkabigo upang buksan o lumikha ng isang file ay nagiging sanhi ng pag-redirect upang mabigo.

Pag-redirect ng Input

Ang pag-redirect ng input ay nagdudulot ng file na ang pangalan ay nagreresulta mula sa pagpapalawak ng salita na bubuksan para sa pagbabasa sa file descriptor n , o ang karaniwang input (file descriptor 0) kung n ay hindi tinukoy.

Ang pangkalahatang format para sa pag-redirect ng input ay:

[ n ] < word

Pag-redirect ng Output

Ang pag-redirect ng output ay nagiging sanhi ng file na ang pangalan ay nagreresulta mula sa pagpapalawak ng salita na bubuksan para sa pagsusulat sa file descriptor n , o ang karaniwang output (file descriptor 1) kung n ay hindi tinukoy. Kung ang file ay hindi umiiral ito ay nilikha; kung ito ay umiiral na ito ay pinutol sa zero size.

Ang pangkalahatang format para sa pag-redirect ng output ay:

[ n ] > salita

Kung ang operator ng redirection ay > , at ang opsyon na noclobber sa set builtin ay na-enable, ang pag-redirect ay mabibigo kung ang file na ang pangalan ay nagreresulta mula sa pagpapalawak ng salita na umiiral at isang regular na file. Kung ang operator ng redirection ay > | , o ang operator ng pag-redirect ay > at ang opsyon na noclobber sa hanay ng command na builtin ay hindi pinagana, ang pag-redirect ay sinubukan kahit na ang file na pinangalanan sa pamamagitan ng salita ay umiiral.

Paggamit ng Redirect Output

Ang pag-redirect ng output sa ganitong paraan ay nagiging sanhi ng file na ang pangalan ay nagreresulta mula sa pagpapalawak ng salita na bubuksan para sa appending sa file descriptor n , o ang karaniwang output (file descriptor 1) kung n ay hindi tinukoy. Kung ang file ay hindi umiiral ito ay nilikha.

Ang pangkalahatang format para sa pagdagdag ng output ay:

[ n ] >> salita

Pag-redirect ng Standard Output at Standard Error

Pinapayagan ng Bash ang parehong karaniwang output (file descriptor 1) at ang karaniwang error output (file descriptor 2) na ma-redirect sa file na ang pangalan ay pagpapalawak ng salita na may ganitong construct.

Mayroong dalawang mga format para sa pag-redirect ng karaniwang output at karaniwang error:

&> salita

at

> & salita

Sa dalawang anyo, ang una ay ginustong. Ito ay katumbas ng katumbas ng

> salita 2 > & 1

Narito ang Mga Dokumento

Ang ganitong uri ng redirection ay nagtuturo sa shell na basahin ang input mula sa kasalukuyang pinagmulan hanggang sa isang linya na naglalaman lamang ng salita (na walang trailing blanks) ay nakikita. Ang lahat ng mga linya basahin hanggang sa puntong iyon ay pagkatapos ay ginagamit bilang ang karaniwang input para sa isang command.

Ang format ng mga dokumento dito ay:

<< [ - ] salita dito-dokumento delimiter

Walang pagpapalaki ng parameter, pagpapalit ng utos, pagpapalawak ng aritmetika, o pagpapalawak ng pathname ay isinagawa sa salita . Kung ang anumang mga character sa salita ay naka-quote, ang delimiter ay ang resulta ng pag-alis ng quote sa salita , at ang mga linya sa dokumento dito ay hindi pinalawak. Kung ang salita ay hindi na nabanggit, ang lahat ng mga linya ng dokumento dito ay napapailalim sa pagpapalawak ng parameter, pagpapalit ng utos, at pagpapalawak ng aritmetika. Sa huling kaso, ang pagkakasunod-sunod ng character \ ay hindi pinansin, at dapat gamitin upang sipiin ang mga character na \ , $ , at ` .

Kung ang operator ng redirection ay << - , ang lahat ng mga nangungunang tab na character ay nakuha mula sa mga linya ng input at ang linya na may delimiter . Pinapayagan nito ang mga dokumentong ito sa loob ng mga script ng shell na i-indent sa natural na paraan.

Narito Strings

Ang isang variant ng mga dokumento dito, ang format ay:

<<< salita

Ang salita ay pinalawak at ibinibigay sa utos sa karaniwang input nito.

Duplicating Descriptors ng File

Ang operator ng pag-redirect

[ n ] <& salita

ay ginagamit sa mga duplicate na mga descriptor ng input file. Kung ang salita ay lumalawak sa isa o higit pang mga digit, ang tagapaglarawan ng file na nilagyan ng n ay ginawa upang maging isang kopya ng file na tagapaglarawan. Kung ang mga digit sa salita ay hindi tumutukoy sa isang file descriptor na bukas para sa input, isang error sa pag-redirect ay nangyayari. Kung ang salita ay sinusuri sa - , ang file descriptor n ay sarado. Kung n ay hindi tinukoy, ang karaniwang input (file descriptor 0) ay ginagamit.

Ang namamahala

[ n ] > & salita

ay ginagamit din sa dobleng output descriptors file. Kung n ay hindi tinukoy, ang karaniwang output (file descriptor 1) ay ginagamit. Kung ang mga digit sa salita ay hindi tumutukoy sa isang file descriptor bukas para sa output, isang error sa pag-redirect ay nangyayari. Bilang isang espesyal na kaso, kung n ay tinanggal, at ang salita ay hindi lumalawak sa isa o higit pang mga digit, ang karaniwang output at karaniwang error ay nai-redirect gaya ng inilarawan dati.

Paglipat ng Descriptors ng File

Ang operator ng pag-redirect

[ n ] <& digit -

gumagalaw ang file descriptor digit upang maghain ng descriptor n , o ang karaniwang input (file descriptor 0) kung n ay hindi tinukoy. ang digit ay sarado pagkatapos na doble sa n .

Katulad nito, ang redirection operator

[ n ] > & digit -

gumagalaw ang file descriptor digit upang maghain ng descriptor n , o ang karaniwang output (file descriptor 1) kung n ay hindi tinukoy.

Pagbubukas ng Descriptors ng File para sa Pagbabasa at Pagsusulat

Ang operator ng pag-redirect

[ n ] <> salita

nagiging sanhi ng file na ang pangalan ay pagpapalawak ng salita na bubuksan para sa parehong pagbabasa at pagsulat sa file descriptor n , o sa file descriptor 0 kung n ay hindi tinukoy. Kung ang file ay hindi umiiral, ito ay nilikha.

ALIASES

Ang mga aliases ay nagpapahintulot sa isang string na substituted para sa isang salita kapag ito ay ginagamit bilang unang salita ng isang simpleng utos. Ang shell ay nagpapanatili ng isang listahan ng mga alias na maaaring itakda at hindi maitakda sa mga alias at unalias builtin commands (tingnan ang SHELL BUILTIN COMMANDS sa ibaba). Ang unang salita ng bawat utos, kung hindi nabanggit, ay nasuri upang makita kung mayroon itong alyas. Kung gayon, ang salitang iyon ay papalitan ng teksto ng alyas. Ang pangalan ng alias at ang kapalit na teksto ay maaaring maglaman ng anumang wastong input ng shell, kabilang ang mga metacharacters na nakalista sa itaas, maliban na ang pangalan ng alias ay maaaring hindi naglalaman ng = . Ang unang salita ng tekstong kapalit ay sinubok para sa mga alias, ngunit ang isang salita na katulad ng isang alias na pinalawak ay hindi pinalawak ng pangalawang pagkakataon. Ito ay nangangahulugan na ang isa ay maaaring alias ls sa ls -F , halimbawa, at bash ay hindi subukan upang recursively palawakin ang kapalit na teksto. Kung ang huling character ng alias na halaga ay isang blangko , pagkatapos ay ang susunod na command word na sumusunod sa alias ay nasuri din para sa alias expansion.

Ang mga aliases ay nilikha at nakalista sa alias na command, at inalis sa unalias command.

Walang mekanismo para sa paggamit ng mga argumento sa kapalit na teksto. Kung kinakailangan ang mga argumento, dapat gamitin ang isang function ng shell (tingnan ang Mga function sa ibaba).

Ang mga aliases ay hindi pinalawak kapag ang shell ay hindi interactive, maliban kung ang opsyon na expand_aliases shell ay naka-set gamit ang shopt (tingnan ang paglalarawan ng shopt sa ilalim ng SHELL BUILTIN COMMANDS sa ibaba).

Ang mga alituntunin tungkol sa kahulugan at paggamit ng mga alyas ay medyo nakalilito. Bash palaging nagbabasa ng hindi bababa sa isang kumpletong linya ng input bago isinasagawa ang anumang ng mga utos sa linya na iyon. Ang mga aliases ay pinalawak kapag binasa ang isang utos, hindi kapag ito ay naisakatuparan. Samakatuwid, ang isang kahulugan ng alias na lumilitaw sa parehong linya bilang isa pang utos ay hindi magkakabisa hanggang sa mabasa ang susunod na linya ng input. Ang mga utos na sumusunod sa kahulugan ng alias sa linyang iyon ay hindi apektado ng bagong alyas. Ang pag-uugali na ito ay isa ring isyu kung papatayin ang mga function. Ang mga aliases ay pinalawak kapag binabasa ang isang kahulugan ng pag-andar, hindi kapag ang pag-andar ay naisakatuparan, sapagkat ang isang kahulugan ng pag-andar ay isang kombinasyong komandante mismo. Bilang kinahinatnan, ang mga alias na tinukoy sa isang function ay hindi magagamit hanggang pagkatapos na ang pag-andar ay naisakatuparan. Upang maging ligtas, palaging ilagay ang mga kahulugan ng alias sa isang hiwalay na linya, at huwag gumamit ng alias sa mga utos ng tambalan.

Para sa halos lahat ng layunin, ang mga alias ay pinalitan ng mga function ng shell.

Mga function

Ang isang function ng shell, na tinukoy gaya ng inilarawan sa itaas sa ilalim ng SHELL GRAMMAR , nag- iimbak ng isang serye ng mga utos para sa pagpapatupad sa ibang pagkakataon. Kapag ang pangalan ng isang shell function ay ginagamit bilang isang simpleng pangalan ng utos, ang listahan ng mga utos na nauugnay sa pangalan ng function na ay pinaandar. Ang mga pag-andar ay isinagawa sa konteksto ng kasalukuyang shell; walang bagong proseso ang nilikha upang bigyang-kahulugan ang mga ito (ihambing ito sa pagpapatupad ng isang shell script). Kapag ang isang function ay naisakatuparan, ang mga argumento sa function ay maging positional parameter sa panahon ng pagpapatupad nito. Ang espesyal na parameter # ay na-update upang ipakita ang pagbabago. Posisyonal na parameter 0 ay hindi nagbabago. Ang variable na FUNCNAME ay nakatakda sa pangalan ng function habang pinapatakbo ang pag-andar. Ang lahat ng iba pang mga aspeto ng kapaligiran ng pagpapatupad ng shell ay magkapareho sa pagitan ng isang function at tumatawag nito maliban na ang DEBUG trap (tingnan ang paglalarawan ng bitag builtin sa ilalim ng SHELL BUILTIN COMMANDS sa ibaba) ay hindi minana maliban kung ang function ay binigyan ng trace attribute ( tingnan ang paglalarawan ng ipinahayag na builtin sa ibaba).

Ang mga variable na lokal sa function ay maaaring ideklara sa lokal na command na builtin. Karaniwan, ang mga variable at ang kanilang mga halaga ay ibinabahagi sa pagitan ng function at tumatawag nito.

Kung ang builtin command return ay naisakatuparan sa isang function, ang pagkumpleto ng function at pagpapatupad ay magpapatuloy sa susunod na command pagkatapos ng call function. Kapag nakumpleto ang isang function, ang mga halaga ng positional parameter at ang mga espesyal na parameter # ay naibalik sa mga halaga na mayroon sila bago ang pagpapatupad ng pag-andar.

Ang mga pangalan at kahulugan ng function ay maaaring nakalista sa -f na opsiyon upang ipahayag o itakda ang mga builtin command. Ang -F na opsiyon na idedeklara o typeset ay maglilista ng mga pangalan ng function lamang. Ang mga pag-andar ay maaring ma-export upang ang mga subshell ay awtomatikong itakda ang mga ito sa -f na opsyon sa export builtin.

Ang mga pag-andar ay maaaring recursive. Walang limitasyong ipinataw sa bilang ng mga recursive na tawag.

ARITHMETIC EVALUATION

Binibigyang-daan ng shell ang mga expression ng aritmetika upang masuri, sa ilalim ng ilang mga pangyayari (tingnan ang let builtin command at Aritmetic Expansion ). Ang pagsusuri ay ginagawa sa mga integer na lapad na lapad na walang tseke para sa overflow, bagama't ang dibisyon ng 0 ay nakulong at na-flag bilang isang error. Ang mga operator at ang kanilang precedence at associativity ay kapareho ng sa wikang C. Ang sumusunod na listahan ng mga operator ay pinagsama sa mga antas ng mga operator ng pantay na precedence. Ang mga antas ay nakalista sa pagkakasunud-sunod ng pagbaba ng nauna.

id ++ id -

variable post-increment at post-decrement

++ id - id

variable na pre-increment at pre-decrement

- +

unary minus at plus

! ~

lohikal at bitwise negation

**

exponentiation

* /%

pagpaparami, dibisyon, natitira

+ -

karagdagan, pagbabawas

<< >>

kaliwa at kanang mga bitwise ay nagbabago

<=> = <>

paghahambing

==! =

pagkakapantay-pantay at hindi pagkakapantay-pantay

&

bitwise AT

^

bitwise eksklusibo OR

|

bitwise OR

&&

lohikal AT

||

lohikal O

expr ? expr : expr

kondisyong pagsusuri

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

pagtatalaga

expr1 , expr2

comma

Ang mga variable ng shell ay pinapayagan bilang mga operand; Ang pagpapalawak ng parameter ay ginaganap bago masuri ang pagpapahayag. Sa loob ng isang expression, ang mga variable ng shell ay maaari ring isangguni sa pangalan nang hindi ginagamit ang parameter na pagpapalawak ng syntax. Ang halaga ng isang variable ay sinusuri bilang isang aritmetika expression kapag ito ay isinangguni. Ang isang variable ng shell ay hindi kailangang magkaroon ng integer attribute na naka-on na gagamitin sa isang expression.

Ang mga Constant na may nangungunang 0 ay ipinapaliwanag bilang mga numero ng oktal. Ang isang nangungunang 0x o 0X ay nagpapahiwatig ng hexadecimal. Kung hindi, ang mga numero ay tumagal ng form [ base # ] n, kung saan ang base ay isang decimal na numero sa pagitan ng 2 at 64 na kumakatawan sa arithmetic base, at n ay isang numero sa base na iyon. Kung ang base # ay tinanggal, ang base 10 ay ginagamit. Ang mga digit na mas malaki sa 9 ay kinakatawan ng mga maliliit na letra, ang malalaking titik, @, at _, sa kautusang iyon. Kung ang base ay mas mababa sa o katumbas ng 36, ang mga maliliit at malalaking titik ay maaaring magamit nang walang pagpapalitan upang kumatawan sa mga numero sa pagitan ng 10 at 35.

Ang mga operator ay sinusuri ayon sa pagkakasunod-sunod. Ang mga sub-expression sa mga panaklong ay unang sinusuri at maaaring i-override ang mga panuntunan ng precedence sa itaas.

CONDITIONAL EXPRESSIONS

Ang mga conditional expression ay ginagamit ng [[ compound command at ang test at [ builtin commands upang subukan ang mga katangian ng file at magsagawa ng string at aritmetika paghahambing. Ang mga expression ay nabuo mula sa sumusunod na mga unary o binary primaries. Kung ang anumang argumento ng file sa isa sa mga primarya ay sa form / dev / fd / n , pagkatapos ay ang file na descriptor n ay naka-check. Kung ang argumento ng file sa isa sa mga primarya ay isa sa / dev / stdin , / dev / stdout , o / dev / stderr , ayon sa pagkakasunud-sunod ng tsek, ang descriptor ng file 0, 1, o 2.

-a file

Totoo kung umiiral ang file .

-b file

Totoo kung umiiral ang file at ito ay isang espesyal na pagharang ng file.

-c file

Totoo kung umiiral ang file at isang espesyal na file ng character.

-d na file

Totoo kung umiiral ang file at direktoryo.

-e file

Totoo kung umiiral ang file .

-f na file

Totoo kung umiiral ang file at regular na file.

-g file

Totoo kung umiiral ang file at naka-set-group-id.

-h file

Totoo kung umiiral ang file at isang symbolic na link.

-k file

Totoo kung umiiral ang file at nakatakda ang `` sticky '' na bit.

-p file

Tama kung umiiral ang file at isang pinangalang tubo (FIFO).

-r file

Totoo kung umiiral ang file at nababasa.

-s file

Totoo kung umiiral ang file at may sukat na mas malaki kaysa sa zero.

-t fd

Totoo kung ang file descriptor fd ay bukas at tumutukoy sa isang terminal.

-u file

Totoo kung ang file ay umiiral at ang set-user-id bit nito ay nakatakda.

-w na file

Totoo kung umiiral ang file at pwedeng isulat.

-x na file

Totoo kung umiiral ang file at maipapatupad.

-O file

Totoo kung umiiral ang file at pagmamay-ari ng epektibong user id.

-G file

Totoo kung umiiral ang file at pagmamay-ari ng epektibong grupong id.

-L file

Totoo kung umiiral ang file at isang symbolic na link.

-S file

Totoo kung umiiral ang file at isang socket.

-N file

Totoo kung ang file ay umiiral at na-modify dahil ito ay huling nabasa.

file1 - nt file2

Tama kung ang file1 ay mas bago (ayon sa petsa ng pagbabago) kaysa sa file2 , o kung ang file1 ay umiiral at ang file2 ay hindi.

file1 - ot file2

Totoo kung ang file1 ay mas luma kaysa sa file2 , o kung ang file2 ay umiiral at ang file1 ay hindi.

file1 -ef file2

Totoo kung file1 at file2 sumangguni sa parehong mga aparato at mga numero ng inode.

-o optname

Totoo kung ang opt option ng shell ay pinapagana. Tingnan ang listahan ng mga opsyon sa ilalim ng paglalarawan ng -o opsyon sa set builtin sa ibaba.

-z string

Totoo kung ang haba ng string ay zero.

-n string

string

Totoo kung ang haba ng string ay di-zero.

string1 == string2

Totoo kung ang mga string ay pantay. = maaaring gamitin sa halip ng == para sa mahigpit na pagsunod sa POSIX.

string1 ! = string2

Totoo kung ang mga string ay hindi katumbas.

string1 < string2

Totoo kung ang string1 uri bago string2 lexicographically sa kasalukuyang locale.

string1 > string2

Totoo kung ang string1 uri pagkatapos ng string2 lexicographically sa kasalukuyang locale.

arg1 OP arg2

Ang OP ay isa sa -eq , -ne , -lt , -le , -gt , o -ge . Ang mga aritmetika na binary operator ay totoo kung ang arg1 ay katumbas ng, hindi katumbas ng, mas mababa kaysa, mas mababa sa o katumbas ng, mas malaki kaysa sa, o mas malaki kaysa o katumbas ng arg2 , ayon sa pagkakabanggit. Arg1 at arg2 ay maaaring positibo o negatibong integer.

SIMPLE EXPANSION NG SIMPLE

Kapag ang isang simpleng utos ay isinagawa, ang shell ay gumaganap ng mga sumusunod na pagpapalawak, mga takdang-aralin, at mga redirection, mula kaliwa hanggang kanan.

1. Ang mga salita na minarkahan ng parser bilang mga variable na takdang-aralin (mga nauna sa pangalan ng command) at mga redirections ay nai-save para sa pagproseso sa ibang pagkakataon.

2. Ang mga salita na hindi variable na mga takdang-aralin o redirections ay pinalawak. Kung ang anumang mga salita ay mananatili pagkatapos ng pagpapalawak, ang unang salita ay kinuha upang maging ang pangalan ng utos at ang natitirang mga salita ay ang mga argumento.

3. Ang mga direksyon ay ginaganap gaya ng inilarawan sa itaas sa ilalim ng PAGBABAGO .

4. Ang teksto pagkatapos ng = sa bawat takdang variable ay sumasailalim sa pagpapalawak ng tilde, pagpapalawak ng parameter, pagpapalit ng utos, pagpapalawak ng aritmetika, at pag-alis ng quote bago itinalaga sa variable.

Kung walang mga resulta ng pangalan ng command, ang mga variable na takdang-aralin ay nakakaapekto sa kasalukuyang kapaligiran ng shell. Kung hindi man, ang mga variable ay idinagdag sa kapaligiran ng executed command at hindi nakakaapekto sa kasalukuyang kapaligiran ng shell. Kung ang alinman sa mga asignatura ay nagtatangkang magtalaga ng isang halaga sa isang variable na readonly, ang isang error ay nangyayari, at lumabas ang command na may non-zero status.

Kung walang mga resulta ng pangalan ng command, ang mga redirect ay ginaganap, ngunit hindi nakakaapekto sa kasalukuyang kapaligiran ng shell. Ang error sa pag-redirect ay nagiging sanhi ng command upang lumabas sa isang hindi-zero na kalagayan.

Kung may isang command name na natitira matapos ang pagpapalawak, ang mga pagpapatupad ay nalikom gaya ng inilarawan sa ibaba. Kung hindi, lumabas ang command. Kung ang isa sa mga expansions ay naglalaman ng isang command na pagpapalit, ang exit status ng command ay ang exit status ng huling command substitution gumanap. Kung walang mga kapalit na utos, lumabas ang command na may katayuan na zero.

COMMAND EXECUTION

Pagkatapos ng isang utos ay nahati sa mga salita, kung ito ay nagreresulta sa isang simpleng utos at isang opsyonal na listahan ng mga argumento, ang mga sumusunod na pagkilos ay nakuha.

Kung ang command name ay naglalaman ng walang slashes, sinisikap ng shell na hanapin ito. Kung may umiiral na isang function ng shell sa pamamagitan ng pangalan na iyon, ang pag-andar na ito ay tinatawag na inilarawan sa itaas sa mga function . Kung ang pangalan ay hindi tumutugma sa isang function, hinahanap ng shell ang mga ito sa listahan ng mga shell builtins. Kung ang isang tugma ay natagpuan, na builtin ay mahihingi.

Kung ang pangalan ay hindi isang function ng shell o isang builtin, at naglalaman ng walang slashes, bash paghahanap bawat elemento ng PATH para sa isang direktoryo na naglalaman ng isang maipapatupad na file sa pamamagitan ng pangalan na iyon. Gumagamit ang Bash ng hash table upang matandaan ang buong mga pathname ng mga maipapatupad na file (tingnan ang hash sa ilalim ng SHELL BUILTIN COMMANDS sa ibaba). Ang isang buong paghahanap ng mga direktoryo sa PATH ay gumanap lamang kung ang command ay hindi matatagpuan sa hash table. Kung ang paghahanap ay hindi matagumpay, ang kopya ay nag-print ng isang mensahe ng error at nagbabalik ng isang exit status ng 127.

Kung ang paghahanap ay matagumpay, o kung ang command name ay naglalaman ng isa o higit pang slashes, ang shell ay nagpapatupad ng pinangalanan na programa sa isang hiwalay na kapaligiran sa pagpapatupad. Ang argumento 0 ay nakatakda sa ibinigay na pangalan, at ang natitirang argumento sa utos ay nakatakda sa mga argumento na ibinigay, kung mayroon man.

Kung nabigo ang pagpapatupad na ito dahil ang file ay hindi nasa format na maipapatupad, at ang file ay hindi isang direktoryo, ito ay ipinapalagay na isang script ng shell , isang file na naglalaman ng mga command shell. Ang isang subshell ay spawned upang maisagawa ito. Ang subshell na ito ay muling nagpapalakas sa sarili nito, upang ang epekto ay tulad ng kung ang isang bagong shell ay ginagamit upang mahawakan ang script, maliban na ang mga lokasyon ng mga utos na naalaala ng magulang (tingnan ang hash sa ilalim ng SHELL BUILTIN COMMANDS ) ay mananatili sa pamamagitan ng bata.

Kung ang programa ay isang file na nagsisimula sa #! , ang natitira sa unang linya ay tumutukoy sa isang interpreter para sa programa. Ang shell ay nagpapatupad ng tinukoy na interpreter sa mga operating system na hindi hawakan ang maipapatupad na format mismo. Ang mga argumento sa interpreter ay binubuo ng isang solong opsyonal na argument sumusunod sa pangalan ng interpreter sa unang linya ng programa, na sinusundan ng pangalan ng programa, na sinusundan ng mga argumento ng command, kung mayroon man.

PANGKALAHATANG PAGSUSURI SA KOMANDA

Ang shell ay may isang pagpapatupad na kapaligiran , na binubuo ng mga sumusunod:

* buksan ang mga file na minana ng shell sa invocation, tulad ng binago ng redirections na ibinigay sa exec builtin

* ang kasalukuyang gumaganang direktoryo na itinakda ng cd , pushd , o popd , o minana ng shell sa invocation

* ang mask ng paglikha ng mode na maskara na itinakda ng umask o minana mula sa magulang ng shell

* Kasalukuyang mga traps na itinakda ng bitag

* Mga parameter ng shell na itinakda ng variable assignment o may set o minana mula sa magulang ng shell sa kapaligiran

* Mga function ng shell na tinukoy sa panahon ng pagpapatupad o minana mula sa magulang ng shell sa kapaligiran

* Pinagana ang mga opsyon sa invocation (alinman sa pamamagitan ng default o sa argumento ng command-line) o sa pamamagitan ng set

* Pinagana ang mga opsyon sa pamamagitan ng shopt

* Mga alias ng shell na tinukoy na may alias

* iba't ibang mga ID ng proseso, kabilang ang mga trabaho sa background, ang halaga ng $$ , at ang halaga ng $ PPID

Kapag ang isang simpleng command maliban sa isang builtin o shell function ay naisakatuparan, ito ay mahihingi sa isang hiwalay na kapaligiran pagpapatupad na binubuo ng mga sumusunod. Maliban kung nabanggit, ang mga halaga ay minana mula sa shell.

* Mga bukas na file ng shell, kasama ang anumang mga pagbabago at pagdaragdag na tinukoy sa pamamagitan ng mga redirections sa command

* ang kasalukuyang gumaganang direktoryo

* ang maskara ng paglikha ng file na file

* Mga variable ng shell na minarkahan para i-export, kasama ang mga variable na nai-export para sa command, na ipinasa sa kapaligiran

* Ang mga traps na nahuli ng shell ay i-reset sa mga halaga na minana mula sa magulang ng shell, at ang mga traps na binabalewala ng shell ay hindi pinansin

Ang isang command na hihingi sa ganitong hiwalay na kapaligiran ay hindi makakaapekto sa kapaligiran ng pagpapatupad ng shell.

Ang command na pagpapalit at asynchronous na mga utos ay ginagamit sa isang subshell na kapaligiran na doble ng kapaligiran ng shell, maliban na ang mga traps na nahuli ng shell ay i-reset sa mga halaga na ang shell na minana mula sa magulang nito sa invocation. Ang mga builtin na utos na hinihingi bilang bahagi ng isang pipeline ay isinagawa din sa isang subshell na kapaligiran. Ang mga pagbabago na ginawa sa subshell na kapaligiran ay hindi makakaapekto sa kapaligiran ng pagpapatupad ng shell.

Kung ang isang command ay sinusundan ng isang & at kontrol ng trabaho ay hindi aktibo, ang default na pamantayang input para sa command ay ang walang laman na file / dev / null . Kung hindi man, ang sinasabing utos ay nagmamana ng mga descriptor ng file ng shell ng pagtawag bilang binago ng redirections.