Sh - Comando de Linux - Comando Unix

NOM

bash - GNU Bourne-Again SHell

SINOPSI

bash [opcions] [fitxer]

DESCRIPCIÓ

Bash és un intèrpret de llenguatge d'ordres compatible amb sh que executa comandaments llegits de l'entrada estàndard o d'un fitxer. Bash també incorpora característiques útils de les capes Korn i C ( ksh i csh ).

Bash pretén ser una implementació conforme de l'especificació Shell and Tools de IEEE POSIX (IEEE Working Group 1003.2).

OPCIONS

A més de les opcions de shell d'un únic caràcter documentat a la descripció de l'ordre builtin, bash interpreta les següents opcions quan s'invoca:

-c cadena

Si l'opció -c està present, es llegeixen les ordres de la cadena . Si hi ha arguments després de la cadena , s'assignen als paràmetres de posició, començant per $ 0 .

-i

Si l'opció -i està present, el shell és interactiu .

-l

Feu acte bash com si hagués estat invocat com a intèrpret d'inici de sessió (vegeu INVOCATION a continuació).

-r

Si l'opció -r està present, el shell es restringeix (vegeu SHELL RESTRINGIT a continuació).

-s

Si l'opció -s està present, o si no hi ha arguments restants després del processament d'opcions, es llegeixen les ordres de l'entrada estàndard. Aquesta opció permet establir els paràmetres de posició quan invoca un intèrpret d'ordres interactiu.

-D

Una llista de totes les cadenes de dues cites precedides per $ s'imprimeix a l'ouput estàndard. Aquestes són les cadenes que estan subjectes a la traducció de l'idioma quan la configuració regional actual no és C o POSIX . Això implica l'opció -n ; no s'executaran comandaments.

[- +] O [ botiga_opció ]

shopt_option és una de les opcions de shell que accepta el fabricant de botigues (vegeu SHELL BUILDING COMMANDS a continuació). Si la botiga_opció està present, -O estableix el valor d'aquesta opció; + O s'estableix. Si no es subministra shopt_option , els noms i valors de les opcions de shell acceptades per shopt s'imprimeixen a la sortida estàndard. Si l'opció d'invocació és + O , la sortida es mostra en un format que es pot reutilitzar com a entrada.

A - indica el final de les opcions i deshabilita el processament d'opcions addicionals. Tots els arguments després del - es tracten com noms de fitxer i arguments. Un argument de - és equivalent a - .

Bash també interpreta una sèrie d'opcions de múltiples caràcters. Aquestes opcions han d'aparèixer a la línia d'ordres abans de reconèixer les opcions d'un sol caràcter.

--dump-po-strings

Equivalent a -D , però la sortida es troba en el format de fitxer GNU gettext po (objectes portàtils).

- cadenes de cadena

Equivalent a -D .

- ajuda

Mostra un missatge d'ús a la sortida estàndard i surt correctament.

- arxiu d' arxiu inicial

--rcfile file

Executeu ordres del fitxer en lloc del fitxer d'inicialització personal estàndard ~ / .bashrc si el intèrpret d'ordres és interactiu (consulteu INVOCATION a continuació).

--iniciar Sessió

Equivalent a -l .

- Noediting

No utilitzeu la biblioteca readline de GNU per llegir les línies de comandes quan el shell és interactiu.

--noprofile

No llegeix el fitxer d'inici de tot el sistema / etc / profile o qualsevol dels fitxers d'inicialització personal ~ / .bash_profile , ~ / .bash_login , o ~ / .profile . Per defecte, bash llegeix aquests fitxers quan s'invoca com a intèrpret d'ordres d'inici de sessió (vegeu INVOCATION a continuació).

--norc

No llegiu i executeu el fitxer d'inicialització personal ~ / .bashrc si el shell és interactiu. Aquesta opció està activada per defecte si el shell es invoca com sh .

--posix

Canvieu el comportament de bash on l'operació predeterminada difereix de la norma POSIX 1003.2 que coincideixi amb l'estàndard ( mode posix ).

- restringit

La closca es restringeix (vegeu SHELL RESTRINGIT a continuació).

- rpm-requereix

Produïu la llista de fitxers necessaris per executar l'script shell. Això implica '-n' i està subjecte a les mateixes limitacions que l'error de temps de compilació de verificació; Backticks, [] proves i evals no s'analitzen de manera que algunes dependències es poden perdre. --verbose Equivalent a -v .

--version

Mostra la informació de la versió d'aquesta instància de bash a la sortida estàndard i surt amb èxit.

ARGUMENTS

Si romanen arguments després del processament d'opcions, i no s'ha subministrat l'opció -c ni l'opció -s , se suposa que el primer argument és el nom d'un fitxer que conté ordres de shell. Si bash és invocat d'aquesta manera, $ 0 s'estableix en el nom del fitxer, i els paràmetres de posició s'estableixen en els arguments restants. Bash llegeix i executa les comandes d'aquest fitxer, i després surt. L' estat de sortida de Bash és l'estat de sortida de l'última ordre executada a l'script. Si no s'executen comandaments, l'estat de sortida és 0. Es fa un primer intent per obrir el fitxer al directori actual i, si no es troba un fitxer, el shell cerca els directoris a PATH per al script.

INVOCACIÓ

Un intèrpret d'ordres d'inici de sessió és aquell el primer caràcter de l'argument zero és a - , o un inici amb l'opció --login .

Un intèrpret d'ordres interactiu és un inici sense arguments sense opció i sense l'opció -c , l'entrada i sortida estàndard dels quals estan connectats a terminals (tal com determina isatty (3)), o un altre amb l'opció -i . PS1 s'estableix i $ - inclou i si bash és interactiu, permetent que un script shell o un fitxer d'inici provi aquest estat.

Els següents paràgrafs descriuen com bash executa els seus fitxers d'inici. Si algun dels fitxers existeix però no es pot llegir, bash informa d'un error. Els tildes s'expandeixen en els noms dels fitxers tal i com es descriu a continuació a l' extensió de Tilde a la secció EXPANSIÓ .

Quan s'invoca bash com un intèrpret d'inici de sessió interactiu o com a intèrpret d'ordres no interactiu amb l'opció --login , primer llegeix i executa les ordres del fitxer / etc / profile , si aquest fitxer existeix. Després de llegir aquest arxiu, busca ~ / .bash_profile , ~ / .bash_login , i ~ / .profile , en aquest ordre, i llegeix i executa comandes del primer que existeix i es pot llegir. Es pot utilitzar l'opció --noprofile quan s'inicia el shell per inhibir aquest comportament.

Quan surt una casella d' entrada, bash llegeix i executa les comandes del fitxer ~ / .bash_logout , si existeix.

Quan s'inicia un intèrpret d'ordres interactiu que no és un intèrpret d'ordres, bash llegeix i executa les ordres de ~ / .bashrc , si aquest fitxer existeix. Això pot ser inhibit mitjançant l'opció --norc . L'opció de fitxer -rcfile obligarà a bash a llegir i executar ordres del fitxer en lloc de ~ / .bashrc .

Quan bash s'inicia sense interacció, per executar un script de shell, per exemple, busca la variable BASH_ENV en l'entorn, amplia el seu valor si apareix allà i utilitza el valor expandit com el nom d'un fitxer per llegir i executar . Bash es comporta com si es executés l'ordre següent:

si [-n "$ BASH_ENV"]; llavors. "$ BASH_ENV"; fi

però el valor de la variable PATH no s'utilitza per buscar el nom del fitxer.

Si s'invoca bash amb el nom sh , intenta imitar el comportament d'inici de les versions històriques de sh al màxim, tot i que també s'ajusta a l'estàndard POSIX. Quan s'invoca com un intèrpret d'inici de sessió interactiu o un intèrpret d'ordres no interactiu amb l'opció --login , primer intenta llegir i executar comandaments de / etc / profile i ~ / .profile , en aquest ordre. L'opció --noprofile pot utilitzar-se per inhibir aquest comportament. Quan s'invoca com un intèrpret d'ordres interactiu amb el nom sh , bash busca la variable ENV , amplia el seu valor si es defineix i utilitza el valor expandit com el nom d'un fitxer per llegir i executar. Com que una casella invocada com sh no intenta llegir i executar comandaments de cap altre fitxer d'inici, l'opció --rcfile no té cap efecte. Un intèrpret d'ordres no interactiu invocat amb el nom sh no intenta llegir cap altre fitxer d'inici. Quan s'invoca com sh , bash entra en mode posix després de llegir els fitxers d'inici.

Quan bash s'inicia en mode posix , com en l'opció de línia de comandaments --posix , segueix l'estàndard POSIX per als fitxers d'inici. En aquest mode, les petxines interactives expandeixen la variable ENV i les ordres es llegeixen i s'executen del fitxer el nom del qual és el valor expandit. No es llegeixen altres fitxers d'inici.

Bash intenta determinar quan s'està executant el dimoni de shell remot, generalment rshd . Si bash determina que s'està executant per rshd , llegeix i executa comandes de ~ / .bashrc , si aquest fitxer existeix i es pot llegir. No ho farà si s'invoca com sh . L'opció --norc pot utilitzar-se per inhibir aquest comportament, i l'opció --rcfile pot ser usada per obligar a llegir un altre fitxer, però generalment, rshd no invoca el shell amb aquestes opcions o permet que es puguin especificar.

Si el shell es comença amb l'identificador d'usuari efectiu (grup) no igual a l'identificador d'usuari real (grup), i l'opció -p no es proporciona, no es llegeixen els fitxers d'inici, les funcions shell no són heretats de l'entorn, SHELLOPTS La variable, si apareix en l'entorn, s'ignora, i l'identificador d'usuari efectiu s'estableix a l'id d'usuari real. Si l'opció -p es proporciona a invocació, el comportament d'inici és el mateix, però l'identificador d'usuari efectiu no es restablirà.

DEFINICIONS

Les definicions següents s'utilitzen al llarg de la resta d'aquest document.

en blanc

Un espai o pestanya.

paraula

Una seqüència de caràcters considerada com una sola unitat per l'intèrpret d'ordres. També conegut com token .

nom

Una paraula que consta només de caràcters alfanumèrics i guions baixos, i que comença amb un caràcter alfabètic o un guió baix. També anomenat identificador .

metacarácter

Un personatge que, quan no esmentat, separa paraules. Un dels següents:

| &; () <> fitxa d'espai

operador de control

Un testimoni que realitza una funció de control. És un dels símbols següents:

|| & &&; ;; () |

PARAULES RESERVADES

Les paraules reservades són paraules que tenen un significat especial a la closca. Les paraules següents es reconeixen com a reservades quan no estan seleccionades i la primera paraula d'un comandament simple (vegeu SHELL GRAMMAR a continuació) o la tercera paraula d'un cas o per a la comanda:

! el cas fas elif més esac fi per a la funció si està seleccionat fins que mentre {} el temps [[]

SHELL GRAMMAR

Ordres simples

Un comandament simple és una seqüència d'assignacions de variables opcionals seguides de paraules i redireccions separades en blanc i finalitzades per un operador de control . La primera paraula especifica la comanda que s'executarà, i es passa com a argument zero. Les paraules restants es passen com a arguments a la comanda invocada.

El valor retornat d'una ordre simple és el seu estat de sortida, o 128 + n si la comanda finalitza amb el senyal n .

Pipelines

Un oleoducte és una seqüència d'un o més comandaments separats pel caràcter | . El format d'un oleoducte és:

[ hora [ -p ]] [! ] command [ | comanda2 ...]

La sortida estàndard de comandament es connecta a través d'una canonada a l'entrada estàndard de l' ordre2 . Aquesta connexió es realitza abans de les redireccions especificades per l'ordre (vegeu REDIRECTION a continuació).

Si la paraula reservada ! precedeix un oleoducte, l'estat de sortida d'aquest oleoducte és el NO lògic de l'estat de sortida de l'últim comandament. En cas contrari, l'estat de la canonada és l'estat de sortida de l'últim comandament. L'intèrpret d'ordres espera que finalitzin tots els comandaments del pipeline abans de tornar un valor.

Si el temps reservat precedeix a un pipeline, el temps transcorregut, així com el temps d'usuari i el sistema que consumeix la seva execució, es registren quan finalitza la canonada. L'opció -p canvia el format de sortida a la especificada per POSIX. La variable TIMEFORMAT es pot establir en una cadena de format que especifica com s'hauria de mostrar la informació de temporització; vegeu la descripció de TIMEFORMAT a sota de les variables del tauler de control .

Cada comanda en pipeline s'executa com un procés separat (és a dir, en un subshell).

Llistes

Una llista és una seqüència d'una o més canonades separades per un dels operadors ; , & , && o || , i finalitzat opcionalment per un de ; , & o .

D'aquests operadors de llista, && i || tenen la mateixa prioritat, seguit per ; i &, que tenen la mateixa prioritat.

Una seqüència d'una o més línies noves pot aparèixer en una llista en comptes d'un punt i coma per delimitar comandes.

Si l'operador de control finalitza una ordre, la shell executa l'ordre en segon pla en un subshell. El shell no espera que acabi la comanda, i l'estat de retorn és 0. Comandes separades per a ; s'executen de manera seqüencial; la closca espera que cada ordre finalitzi al seu torn. L'estat de retorn és l'estat de sortida de l'última ordre executada.

Els operadors de control && i || denota les llistes AND i les llistes O, respectivament. Una llista AND té el formulari

command1 & & command2

command2 s'executa si, i només si, command1 retorna un estat de sortida de zero.

Una llista OR té el formulari

comanda1 || comanda2

command2 s'executa si i només si command1 retorna un estat de sortida no zero. L'estat de retorn de les llistes AND i OR és l'estat de sortida de l'última ordre executada a la llista.

Comandaments compostos

Un comandament compost és un dels següents:

( llista )

La llista s'executa en un subshell. Les assignacions variables i les ordres integrades que afecten l'entorn del shell no romanen en vigor després de completar l'ordre. L'estat de retorn és l'estat de sortida de la llista .

{ llista ; }

La llista només s'executa en l'entorn del shell actual. La llista ha de finalitzar amb una nova línia o punt i coma. Això es coneix com a comanda grupal . L'estat de retorn és l'estat de sortida de la llista . Tingueu en compte que a diferència dels metacarquets ( i ) , { i } són paraules reservades i s'han de produir quan es permet que es reconegui una paraula reservada. Atès que no causen un salt de paraula, s'han de separar de la llista per espais en blanc.

(( expressió ))

L' expressió s'avalua segons les regles que es descriuen a continuació sota AVALUACIÓ ARITÈMICA . Si el valor de l'expressió no és zero, l'estat de devolució és 0; en cas contrari, l'estat de devolució és 1. Això és exactament equivalent a deixar " expressió ".

[[ expressió ]]

Retorna un estat de 0 o 1 depenent de l'avaluació de l'expressió condicional d' expressió . Les expressions es componen de les primàries descrites a continuació a EXPRESSIONS CONDICIONALS . La divisió de paraules i l'extensió del nom de la ruta no es realitzen entre les paraules [[ i ]] ; L'expansió de la tilde, l'expansió de paràmetres i variables, l'expansió aritmètica, la substitució de comandaments, la substitució de processos i l'eliminació de quotes es realitzen.

Quan s'utilitzen els operadors == i ! = , La cadena a la dreta de l'operador es considera un patró i es combina d'acord amb les regles que es descriuen a continuació sota Patrons de coincidència . El valor retornat és 0 si la cadena coincideix o no coincideix amb el patró, respectivament, i 1 en cas contrari. Es pot citar qualsevol part del patró per obligar-lo a coincidir com una cadena.

Les expressions es poden combinar utilitzant els següents operadors, que figuren en un ordre decreixent de prioritat:

( expressió )

Retorna el valor de l' expressió . Això es pot utilitzar per anul·lar la prioritat normal dels operadors.

! expressió

És cert si l' expressió és falsa.

expression1 & & expression2

És cert si tant expression1 com expression2 són vertaders.

expression1 | | expression2 És cert si l' expressió 1 o l' expressió 2 són vertaderes.

The && i || els operadors no avaluen expression2 si el valor de l' expressió 1 és suficient per determinar el valor retornat de tota l'expressió condicional.

per al nom [ en la paraula ]; fer la llista ; fet

S'expandeix la llista de paraules següents a continuació, generant una llista d'elements. El nom de la variable s'estableix a cada element d'aquesta llista al seu torn, i la llista s'executa cada vegada. Si s'omet l' en paraula , l'ordre executa la llista una vegada per cada paràmetre posicional que s'estableix (vegeu PARÀMETRES a continuació). L'estat de retorn és l'estat de sortida de l'última ordre que s'executa. Si l'expansió dels elements que segueixen els resultats en una llista buida, no s'executen comandaments i l'estat de devolució és 0.

per (( expr1 ; expr2 ; expr3 )); fer la llista ; fet

En primer lloc, l'expressió aritmètica expr1 s'avalua d'acord amb les regles que es descriuen a continuació sota AVALUACIÓ ARITÈMICA . L'expressió aritmètica expr2 és llavors avaluada repetidament fins que s'avalua a zero. Cada vegada que expr2 s'avalua amb un valor que no és zero, s'executa la llista i s'avalua l'expressió aritmètica expr3 . Si s'omet alguna expressió, es comporta com si avalués a 1. El valor retornat és l'estat de sortida de l'última ordre de la llista que s'executa, o false si alguna de les expressions no és vàlida.

seleccioneu el nom [ en la paraula ]; fer la llista ; fet

S'expandeix la llista de paraules següents a continuació, generant una llista d'elements. El conjunt de paraules ampliades s'imprimeix en l'error estàndard, cadascuna amb un número precedit. Si s'omet la paraula , els paràmetres de posició s'imprimeixen (vegeu PARÀMETRES a sota). Després es mostra l'indicador PS3 i es llegeix una línia de l'entrada estàndard. Si la línia consisteix en un número corresponent a una de les paraules mostrades, el valor del nom s'estableix en aquesta paraula. Si la línia està buida, es tornaran a mostrar les paraules i l'indicatiu. Si es llegeix EOF, es completa l'ordre. Qualsevol altre valor que llegeix provoca que el nom s'hagi definit com a nul. La línia de lectura es desa a la variable RESPOSTA . La llista s'executa després de cada selecció fins que s'executa una ordre break . L'estat de sortida de seleccionar és l'estat de sortida de l'última ordre executada a la llista , o zero si no es van executar comandaments.

Paraula en [[(] patró [ | patró ]

Una ordre de cas expandeix primer la paraula i intenta combinar-la amb cada patró alhora, utilitzant les mateixes regles que coincideixen amb l'expansió de la ruta d'accés (vegeu Expansió de nom de ruta a continuació). Quan es troba una coincidència, s'executa la llista corresponent. Després del primer partit, no s'intentaran coincidències posteriors. L'estat de sortida és zero si no coincideix cap patró. En cas contrari, és l'estat de sortida de l'última ordre executada a la llista .

si la llista ; llavors llista; [ llista elif ; llavors llista ; ] ... [ altra llista ; ] fi

La llista si s'executa la llista . Si el seu estat de sortida és zero, s'executa la llista . En cas contrari, cada llista elif s'executa al seu torn, i si el seu estat de sortida és zero, s'executa la llista corresponent i es completa l'ordre. En cas contrari, s'executa la llista d' altres , si està present. L'estat de sortida és l'estat de sortida de l'última ordre executada, o zero si no hi ha cap condició verificada.

mentre que la llista ; fer la llista ; fet

fins a la llista ; fer la llista ; fet

La comanda while controla de manera contínua la llista de tasques sempre que l'última ordre de la llista retorna un estat de sortida de zero. La comanda fins a és idèntica a la comanda while , excepte que la prova està negada; la llista de tasques s'executa sempre que l'última ordre de la llista retorna un estat de sortida no zero. L'estat de sortida dels comandaments de temps i fins a és l'estat de sortida de l'última ordre de llista executada, o zero si no s'ha executat cap.

[ funció ] nom () ( llista ; }

Això defineix una funció anomenada nom . El cos de la funció és la llista d'ordres entre {i}. Aquesta llista s'executa quan s'especifica el nom com a nom d'un comandament senzill. L'estat de sortida d'una funció és l'estat de sortida de l'última ordre executada en el cos. (Vegeu FUNCIONS a continuació).

COMENTARIS

En un intèrpret d'ordres no interactiu o un intèrpret d'ordres interactiu en el que està habilitada l'opció de comentaris interactius a la botiga integrada (vegeu SHELL BUILDING COMMANDS a continuació), una paraula que comença amb # fa que aquesta paraula i tots els caràcters restants d'aquesta línia siguin ignorats. Un intèrpret d'ordres interactiu sense l'opció interactiva de comentaris habilitat no permet comentaris. L'opció interactive_comments està activada de manera predeterminada a les petxines interactives.

COTITZACIÓ

La cotització s'utilitza per eliminar el significat especial de certs caràcters o paraules al shell. La cotització es pot utilitzar per desactivar el tractament especial per a caràcters especials, per evitar que les paraules reservades siguin reconegudes com a tals i per evitar l'expansió dels paràmetres.

Cadascun dels metacarens que figuren més amunt en DEFINICIONS té un significat especial per a la closca i cal citar si es vol representar.

Quan s'utilitzen les instal·lacions d'expansió de l'historial d'ordres, el caràcter d' expansió de la història , generalment ! , s'ha de citar per evitar l'expansió de la història.

Hi ha tres mecanismes de cites: el personatge d'escapament , les cometes simples i les cometes dobles.

Una barra invertida no citada ( \ ) és el caràcter d'escapament . Conserva el valor literal del següent caràcter següent, a excepció de . Si apareix un parell \ i la barra invertida no es cita, el \ es tracta com una continuació de línia (és a dir, s'elimina de la seqüència d'entrada i s'ignora de manera efectiva).

La inclusió de caràcters en cometes simples conserva el valor literal de cada caràcter dins de les cometes. És possible que no es produeixi una quota única entre cites simples, fins i tot quan sigui precedida d'una barra invertida.

La inclusió de caràcters en cometes dobles conserva el valor literal de tots els caràcters dins de les cometes, a excepció de $ , ` , i \ . Els caràcters $ i ` conserven el seu significat especial dins de les cometes dobles. La barra invertida conserva el seu significat especial només quan se segueix un dels següents caràcters: $ , ` , ' , \ , o . Es pot citar una comanda doble en cometes dobles precedint-la amb una barra invertida.

Els paràmetres especials * i @ tenen un significat especial en les cometes dobles (vegeu PARÀMETRES a continuació).

Les paraules de la forma $ ' string ' es tracten especialment. La paraula s'expandeix a la cadena , amb caràcters d'escapament de la barra invertida substituïts segons l'especificat per l'estàndard ANSI C. Les seqüències d'escapament de la barra invertida, si estan presents, es decodifican de la manera següent:

\ a

alerta (campana)

\ b

espai enrere

\ e

un personatge d'escapament

\ f

feed de formularis

\ n

nova línia

\ r

retorn de carro

\ t

pestanya horitzontal

\ v

pestaña vertical

\\

barra invertida

\ '

cita individual

\ nnn

el caràcter de vuit caràcters el valor del qual és el valor octal nnn (un a tres dígits)

\ x HH

el caràcter de vuit bits el valor és el valor hexadecimal HH (un o dos dígits hexadecimals)

\ c x

un caràcter de control- x

El resultat expandit es cita en un sol terme, com si el signe del dòlar no hagués estat present.

Una cadena de dos dígits precedida d'un signe de dòlar ( $ ) farà que la cadena es tradueixi segons la configuració regional actual. Si la configuració regional actual és C o POSIX , s'ignora el signe del dòlar. Si la cadena es tradueix i es reemplaça, la substitució es cita dues vegades.

PARÀMETRES

Un paràmetre és una entitat que emmagatzema valors. Pot ser un nom , un número o un dels caràcters especials que s'enumeren a continuació sota Paràmetres especials . Per als objectius de shell, una variable és un paràmetre denotat per un nom . Una variable té un valor i zero o més atributs . Els atributs s'assignen utilitzant l'ordre declare builtin (vegeu declari a continuació a SHELL BUILTIN COMMANDS).

S'estableix un paràmetre si s'ha assignat un valor. La cadena nul·la és un valor vàlid. Una vegada que s'ha establert una variable, només es pot desactivar mitjançant l'ús de la comanda sense configurar (vegeu SHELL BUILTIN COMMANDS a continuació).

Es pot assignar una variable mitjançant una declaració del formulari

nom = [ valor ]

Si no es dóna un valor , la variable s'atribueix a la cadena nul·la. Tots els valors es fan extensió de tilde, paràmetres i expansió variable, substitució de comanda, expansió aritmètica i eliminació de quotes (vegeu EXPANSIÓ a continuació). Si la variable té el seu conjunt d'atributs integrats , el valor està subjecte a l'expansió aritmètica, fins i tot si no s'utilitza l'expansió $ ((...)) (vegeu Expansió aritmètica més avall). La divisió de paraules no es realitza, a excepció de "$ @" tal com s'explica a continuació a Paràmetres especials . No es fa l'expansió de la ruta d'accés. Les instruccions d'assignació també poden aparèixer com a arguments per als comandaments declarats, tipogràfics , exportats , llegítims i locals .

Paràmetres posicionals

Un paràmetre de posició és un paràmetre denotat per un o més dígits, que no sigui el dígit únic 0. Els paràmetres posicionals s'assignen a partir dels arguments de l'intèrpret d'ordres quan s'invoca, i es pot reassignar mitjançant l'ordre set builtin. Els paràmetres posicionals no es poden assignar a les declaracions d'assignació. Els paràmetres de posició es reemplacen temporalment quan s'executa una funció de shell (vegeu FUNCIONS a continuació).

Quan s'expandeix un paràmetre de posició que consta de més d'un sol dígit, s'ha d'incloure amb claudàtors (veure EXPANSIÓ a continuació).

Paràmetres especials

La closca tracta diversos paràmetres especialment. Aquests paràmetres només es poden fer referència; l'assignació a ells no està permesa.

*

S'expandeix als paràmetres de posició, començant per un. Quan l'expansió es produeix dins de cometes dobles, s'amplia a una sola paraula amb el valor de cada paràmetre separat pel primer caràcter de la variable especial IFS . És a dir, " $ * " equival a " $ 1 c $ 2 c ... ", on c és el primer caràcter del valor de la variable IFS . Si l' IFS no està establert, els paràmetres es separen per espais. Si IFS és nul, els paràmetres s'uneixen sense separadors que intervenen.

@

S'expandeix als paràmetres de posició, començant per un. Quan l'expansió es realitza dins de cometes dobles, cada paràmetre s'amplia a una paraula separada. És a dir, " $ @ " és equivalent a " $ 1 " " $ 2 " ... Quan no hi ha paràmetres de posició, " $ @ " i $ @ s'expandeixen a res (és a dir, s'eliminen).

#

S'expandeix al nombre de paràmetres de posició en decimal.

?

S'expandeix a l'estat de la canonada del primer pla executat recentment.

-

S'expandeix als marcadors d'opció actuals tal com s'especifica després de la invocació, per l'ordre set builtin, o els que estableix el propi shell (com ara l'opció -i ).

$

S'expandeix a l'ID del procés del shell. En un () subshell, s'expandeix a l'identificador del procés del shell actual, no el subshell.

!

S'expandeix a l'ID del procés de l'ordre de fons més recent (asíncron).

0

S'expandeix al nom del shell o shell script. Això s'estableix a la inicialització de l'intèrpret d'ordres. Si s'invoca bash amb un fitxer d'ordres, $ 0 s'estableix en el nom d'aquest fitxer. Si bash s'inicia amb l'opció -c , llavors $ 0 s'estableix en el primer argument després de la cadena a executar, si n'hi ha un. En cas contrari, s'estableix en el nom del fitxer utilitzat per invocar bash , tal com es dóna amb l'argument zero.

_

En iniciar l'intèrpret d'ordres, configureu el nom del fitxer absolut del shell o l'script del shell que s'executi com es passa a la llista d'arguments. Posteriorment, s'expandeix a l'últim argument de l'ordre anterior, després de l'expansió. També s'estableix el nom del fitxer complet de cada comanda executat i col·locat en l'entorn exportat a aquesta comanda. En comprovar el correu, aquest paràmetre conté el nom del fitxer de correu que s'està verificant actualment.

Variables del tipus Shell

Les següents variables són definides pel shell:

BASH

S'expandeix al nom del fitxer complet usat per invocar aquesta instància de bash .

BASH_VERSINFO

Una variable de matriu de lectura, els membres tenen informació de versió per a aquesta instància de bash . Els valors assignats als membres de la matriu són els següents:

BASH_VERSINFO [ 0]

El número de versió principal (el llançament ).

BASH_VERSINFO [ 1]

El número de versió menor (la versió ).

BASH_VERSINFO [ 2]

El nivell del pegat.

BASH_VERSINFO [ 3]

La versió de compilació.

BASH_VERSINFO [ 4]

Estat de llançament (p. Ex., Beta1 ).

BASH_VERSINFO [ 5]

El valor de MACHTYPE .

BASH_VERSION

S'expandeix a una cadena que descriu la versió d'aquesta instància de bash .

COMP_CWORD

COMP_LINE

La línia d'ordres actual. Aquesta variable només està disponible en funcions de shell i comandaments externs invocats per les instal·lacions programables de compleció (vegeu Compleció programable a continuació).

COMP_POINT

COMP_WORDS

Una variable de matriu (vegeu Arrays a sota) que consta de les paraules individuals a la línia d'ordres actual. Aquesta variable només està disponible en funcions de shell invocades per les instal·lacions programables (vegeu Compleció programable a continuació).

DIRSTACK

Una variable de matriu (veure Arranjaments a sota) que conté els continguts actuals de la pila de directoris. Els directoris apareixen a la pila en l'ordre que mostren els dirs incorporats. L'assignació a membres d'aquesta variable de matriu es pot utilitzar per modificar els directoris ja existents a la pila, però s'ha de fer servir el pushd i popd builtins per afegir i eliminar directoris. L'assignació a aquesta variable no canviarà el directori actual. Si DIRSTACK no es configura, perd les seves propietats especials, fins i tot si es reinicia posteriorment.

EUID

S'expandeix a l'identificador d'usuari efectiu de l'usuari actual, inicialitzat a l'inici del shell. Aquesta variable és readonly.

FUNCNAME

El nom de qualsevol funció de shell que s'estigui executant actualment. Aquesta variable només existeix quan s'està executant una funció de shell. Les assignacions a FUNCNAME no tenen cap efecte i retornen un estat d'error. Si FUNCNAME no es configura, perd les seves propietats especials, fins i tot si es reinicia posteriorment.

GRUPS

Una variable de matriu que conté la llista de grups dels quals l'usuari actual és membre. Les assignacions a GRUPS no tenen cap efecte i retornen un estat d'error. Si GROUPS no està establert, perd les seves propietats especials, encara que es restableixi posteriorment.

HISTCMD

El número d'historial o l'índex de la llista d'historial de l'ordre actual. Si HISTCMD no està establert , perd les seves propietats especials, fins i tot si es reinicia posteriorment.

Cognom

Estableix automàticament el nom de l'amfitrió actual.

HOSTTYPE

S'estableix automàticament en una cadena que descriu de manera exclusiva el tipus de màquina en què s'executa bash . El valor predeterminat depèn del sistema.

LINENO

Cada vegada que es fa referència a aquest paràmetre, el complement substitueix un nombre decimal que representa el número de línia seqüencial actual (començant per 1) dins d'un script o funció. Quan no està en un script o una funció, el valor substituït no es garanteix que sigui significatiu. Si LINENO no està definit, perd les seves propietats especials, fins i tot si es reinicia posteriorment.

MACHTYPE

S'estableix automàticament en una cadena que descriu completament el tipus de sistema en què s'executa bash , en el format estàndard del sistema de CPU-empresa GNU. El valor predeterminat depèn del sistema.

OLDPWD

El directori de treball anterior establert per l'ordre cd .

OPTARG

El valor de l'argument d'última opció processat per l'ordre getopts builtin (vegeu SHELL BUILTIN COMMANDS a continuació).

OPTIND

L'índex del següent argument a processar per l'ordre getopts builtin (vegeu SHELL BUILDING COMMANDS a continuació).

OSTYPE

S'estableix automàticament en una cadena que descriu el sistema operatiu en què s'executa bash . El valor predeterminat depèn del sistema.

PIPESTATUS

Una variable de matriu (vegeu Arrays a sota) que conté una llista de valors d'estat de sortida dels processos de la canonada del primer pla executat més recentment (que pot contenir només un sol comandament).

PPID

L'ID del procés dels pares del shell. Aquesta variable és readonly.

PWD

El directori de treball actual establert per l'ordre cd .

RANDOM

Cada vegada que es fa referència a aquest paràmetre, es genera un enter aleatori entre 0 i 32767. Es pot inicialitzar la seqüència de nombres aleatoris assignant un valor a RANDOM . Si RANDOM no es configura, perd les seves propietats especials, fins i tot si es reinicia posteriorment.

RESPOSTA

Estableix a la línia d'entrada llegida per l'ordre builtin read quan no es proporcionen arguments.

SECONDS

Cada vegada que es fa referència a aquest paràmetre, es retorna el nombre de segons des de la invocació de la closca. Si s'assigna un valor a SECONDS , el valor retornat a les referències posteriors és el nombre de segons des de l'assignació més el valor assignat. Si SECONDS no es configura, perd les seves propietats especials, fins i tot si es reinicia posteriorment.

SHELLOPTS

Una llista separada per punts de les opcions de la shell habilitada. Cada paraula de la llista és un argument vàlid per a l'opció -o de la comanda set builtin (vegeu SHELL BUILTIN COMMANDS a continuació). Les opcions que apareixen a SHELLOPTS són les que s'informa segons el set -o . Si aquesta variable es troba en l'entorn quan s'inicia el bash , cada opció shell de la llista serà habilitada abans de llegir qualsevol fitxer d'inici. Aquesta variable és de només lectura.

SHLVL

S'incrementa un cop cada vegada que s'inicia una instància de bash .

UID

S'expandeix a l'identificador d'usuari de l'usuari actual, inicialitzat a l'inici del shell. Aquesta variable és readonly.

El shell utilitza les següents variables. En alguns casos, bash assigna un valor predeterminat a una variable; aquests casos es detalla a continuació.

BASH_ENV

Si aquest paràmetre s'estableix quan bash executa un script de shell, el seu valor s'interpreta com un nom de fitxer que conté ordres per inicialitzar el shell, com en ~ / .bashrc . El valor de BASH_ENV està subjecte a l'expansió de paràmetres, la substitució de comandaments i l'expansió aritmètica abans d'interpretar-se com un nom de fitxer. La ruta no s'utilitza per buscar el nom del fitxer resultant.

CDPATH

La ruta de cerca de l'ordre cd . Aquesta és una llista de directoris separada per dos punts en què el shell busca els directoris de destinació especificats per l'ordre cd . Un valor de mostra és ".: ~: / Usr".

COLUMNS

Utilitzat per l'ordre select builtin per determinar l'amplada del terminal quan imprimiu les llistes de selecció. Config. Automàticament després del rebut d'un SIGWINCH.

COMPREPLY

Una variable de matriu a partir de la qual bash llegeix les possibles terminacions generades per una funció de shell invocada per la facilitat de finalització programable (vegeu Compleció programable a continuació).

FCEDIT

L'editor per defecte de l'ordre builtin fc .

FIGNORE

Una llista de sufixos separats per dos punts per ignorar quan realitzeu la finalització del nom del fitxer (vegeu READLINE a continuació). Un nom de fitxer amb un sufix que coincideixi amb una de les entrades de FIGNORE queda exclòs de la llista de noms de fitxer coincidents. Un valor de mostra és ". O: ~".

GLOBIGNORE

Una llista de patrons separada per dos punts que defineix el conjunt de noms de fitxers que s'ignorarà per l'expansió del nom de la ruta. Si un nom de fitxer coincident amb un patró d'expansió de nom de ruta també coincideix amb un dels patrons de GLOBIGNORE , se suprimeix de la llista de coincidències.

HISTCONTROL

Si s'estableix un valor de ignorespace , les línies que comencen amb un caràcter d' espai no s'introdueixen a la llista d'historial. Si s'estableix un valor de ignoredups , no s'hi introdueixen línies que coincideixen amb la darrera línia de l'historial. Un valor ignoreboth combina les dues opcions. Si no s'estableix, o si s'estableix en qualsevol altre valor que els anteriors, totes les línies llegides per l'analitzador es desen a la llista d'històries, subjectes al valor de HISTIGNORE . La funció de la variable es reemplaça per HISTIGNORE . Les línies segones i posteriors d'un comandament compost múltiple no són provades i s'afegeixen a la història independentment del valor de HISTCONTROL .

HISTFILE

El nom del fitxer en què es guarda l'historial de comandes (vegeu HISTORIA a continuació). El valor predeterminat és ~ / .bash_history . Si no s'estableix, l'historial de comandaments no es desarà quan surti una casella interactiva.

HISTFILESIZE

El nombre màxim de línies que conté el fitxer d'historial. Quan es assigna un valor a aquesta variable, el fitxer d'historial es trunca, si cal, per no contenir més d'aquest nombre de línies. El valor per defecte és 500. El fitxer d'historial també es trunca a aquesta mida després d'escriure-lo quan surt una casella interactiva.

HISTIGNORE

Una llista de patrons separada per dos punts usava per decidir quines línies de comandes s'han de desar a la llista d'històries. Cada patró està ancorat al principi de la línia i ha de coincidir amb la línia completa (no s'hi afegeix ` * 'implícit). Cada patró es prova amb la línia després d'aplicar els controls especificats per HISTCONTROL . A més dels patrons de coincidència del patró normal, ` & 'coincideix amb la línia de l'historial anterior. ` & 'es pot escapar usant una barra invertida; la barra invertida s'elimina abans d'intentar una coincidència. Les línies segones i posteriors d'un comandament compost múltiple no són provades i s'afegeixen a la història, independentment del valor de HISTIGNORE .

HISTSIZE

El nombre d'ordres a recordar a l'historial de comandaments (vegeu HISTORIA a continuació). El valor predeterminat és 500.

INICI

El directori principal de l'usuari actual; l'argument predeterminat per a l'ordre builtin cd . El valor d'aquesta variable també s'utilitza quan es fa l'expansió de la tila.

HOSTFILE

Conté el nom d'un fitxer en el mateix format que / etc / host que s'ha de llegir quan el shell necessita completar un nom d'amfitrió. La llista de possibles terminacions de nom de host es pot canviar mentre el shell s'està executant; la propera vegada que es compleixi la finalització del nom del servidor després de canviar el valor, bash afegeix el contingut del nou fitxer a la llista existent. Si HOSTFILE està establert, però no té cap valor, bash intenta llegir / etc / hosts per obtenir la llista de possibles terminacions de nom de host. Quan HOSTFILE no està establert , la llista de nom d'amfitrió està desactivada.

IFS

El separador de camp intern que s'utilitza per a la divisió de paraules després de l'expansió i per dividir les línies en paraules amb l'ordre builtin read . El valor predeterminat és `` ''.

IGNOREEOF

Controla l'acció d'un intèrpret d'ordres interactiu en rebre el caràcter d' EOF com a única entrada. Si s'estableix, el valor és el nombre de caràcters consecutius d' EOF que s'han d'escriure com els primers caràcters en una línia d'entrada abans de sortir de bash . Si la variable existeix, però no té un valor numèric, o no té valor, el valor predeterminat és 10. Si no existeix, EOF significa el final de l'entrada al shell.

INPUTRC

El nom de fitxer del fitxer d'inici de readline , que invalida el valor predeterminat de ~ / .inputrc (vegeu READLINE a continuació).

LANG

S'utilitza per determinar la categoria local per a qualsevol categoria que no s'hagi seleccionat específicament amb una variable que comenci per LC_ .

LC_ALL

Aquesta variable anul·la el valor de LANG i qualsevol altra variable LC_ que especifiqui una categoria local.

LC_COLLATE

Aquesta variable determina l'ordre de col·lació que s'utilitza quan es classifiquen els resultats de l'extensió del nom de la ruta i determina el comportament de les expressions de rang, les classes d'equivalència i les seqüències de recopilació dins de l'extensió de la ruta i la concordança de patrons.

LC_CTYPE

Aquesta variable determina la interpretació dels caràcters i el comportament de les classes de caràcters dins de l'extensió del nom de la ruta i la concordança de patrons.

LC_MESSAGES

Aquesta variable determina la configuració regional utilitzada per traduir cadenes de dues cites precedides d'un $ .

LC_NUMERIC

Aquesta variable determina la categoria local usada per al formatat de números.

LINES

Utilitzat per l'ordre select builtin per determinar la longitud de la columna per imprimir les llistes de selecció. Config. Automàticament després del rebut d'un SIGWINCH.

CORREU

Si aquest paràmetre s'estableix en un nom de fitxer i la variable MAILPATH no està establerta, bash informa a l'usuari sobre l'arribada del correu al fitxer especificat.

MAILCHECK

Especifica amb quina freqüència (en segons) bash comprova si hi ha correu. El valor predeterminat és de 60 segons. Quan és hora de consultar el correu, el shell ho fa abans de mostrar l'indicador principal. Si aquesta variable no s'estableix, o s'estableix en un valor que no és un número major o igual que zero, el shell no permet la comprovació de correu.

MAILPATH

Llista de noms de fitxers separats per dos punts per verificar el correu. El missatge que es vol imprimir quan arriba el correu en un arxiu determinat es pot especificar separant el nom del fitxer del missatge amb un `? '. Quan s'utilitza en el text del missatge, $ _ s'expandeix al nom del fitxer de correu actual. Exemple:

MAILPATH = '/ var / mail / bfox? "Teniu correu": ~ / shell-mail? "$ _ Té correu!"'

Bash subministra un valor predeterminat per a aquesta variable, però la ubicació dels fitxers de correu d'usuari que utilitza depèn del sistema (p. Ex. / Var / mail / $ USER ).

OPTERR

Si s'estableix el valor 1, bash mostra els missatges d'error generats per l'ordre getopts builtin (vegeu SHELL BUILDING COMMANDS a continuació). OPTERR s'inicialitza a 1 cada vegada que s'invoca el intèrpret d'ordres o s'executa una seqüència de comandaments.

CAMÍ

La ruta d'accés a les ordres. Es tracta d'una llista de directoris separada per dos punts en què el shell busca ordres (vegeu EXECUCIÓ DE COMANDA a continuació). La ruta predeterminada depèn del sistema, i l'administrador que instal·la bash l' estableix. Un valor comú és `` / usr / gnu / bin: / usr / local / bin: / usr / ucb: / bin: / usr / bin :. ''.

POSIXLY_CORRECT

Si aquesta variable es troba en l'entorn quan comença bash , l'intèrpret d'ordres entra en mode posix abans de llegir els fitxers d'inici, com si l'opció de invocació -posix hagués estat subministrada. Si s'estableix mentre el shell està en execució, bash habilita el mode posix , com si l'ordre set -o posix s'hagués executat.

PROMPT_COMMAND

Si s'estableix, el valor s'executa com una ordre abans d'emetre cada indicador principal.

PS1

El valor d'aquest paràmetre s'expandeix (vegeu PROMPTING a sota) i s'utilitza com a cadena d'indicadors primària. El valor predeterminat és `` \ s- \ v \ $ ''.

PS2

El valor d'aquest paràmetre s'expandeix com amb PS1 i s'utilitza com a cadena secundària del missatge. El valor predeterminat és `` > ''.

PS3

El valor d'aquest paràmetre s'utilitza com a indicador de l'ordre de selecció (vegeu SHELL GRAMMAR a dalt).

PS4

El valor d'aquest paràmetre s'expandeix com amb PS1 i el valor s'imprimeix abans que cada comandament es mostri durant un seguiment d'execució. El primer caràcter de PS4 es reprodueix diverses vegades, segons sigui necessari, per indicar diversos nivells d'indirecció. El valor predeterminat és `` + ''.

TIMEFORMAT

El valor d'aquest paràmetre s'utilitza com una cadena de format que especifica com s'hauria de mostrar la informació de temps de les canonades prefixades amb la paraula reservada. El caràcter % introdueix una seqüència d'escapament que s'expandeix a un valor de temps o altra informació. Les seqüències d'escapament i els seus significats són les següents; les claus indiquen porcions opcionals.

%%

Un % literal.

% [ p ] [l] R

El temps transcorregut en segons.

% [ p ] [l] U

El nombre de segons de CPU gastats en mode d'usuari.

% [ p ] [l] S

El nombre de segons de CPU gastats en mode de sistema.

% P

El percentatge de CPU, calculat com (% U +% S) /% R.

El p opcional és un dígit que especifica la precisió , el nombre de dígits fraccionaris després d'un punt decimal. Un valor de 0 no fa que es generi cap punt o fracció decimal. Com a màxim tres llocs després del punt decimal es poden especificar; els valors de p major que 3 es canvien a 3. Si p no s'especifica, s'utilitza el valor 3.

L'opcional l especifica un format més llarg, inclosos els minuts, del formulari MM m SS . FF s. El valor de p determina si s'inclou o no la fracció.

Si aquesta variable no està establerta, bash actua com si tingués el valor $ '\ nreal \ t% 3lR \ nuser \ t% 3lU \ nsys% 3lS' . Si el valor és nul, no es mostrarà la informació de temporització. S'afegeix una nova línia final quan es mostra la cadena de format.

TMOUT

Si s'estableix en un valor superior a zero, TMOUT es tracta com el temps d'espera predeterminat per a la lectura integrada. L'ordre de selecció finalitza si l'entrada no arriba després de TMOUT segons quan l'entrada prové d'un terminal. En un intèrpret d'ordres interactiu, el valor s'interpreta com el nombre de segons que cal esperar per a l'entrada després d'emetre l'indicador principal. Bash finalitza després d'esperar durant aquest nombre de segons si l'entrada no arriba.

Reprendre automàticament

Aquesta variable controla com interactua la closca amb l'usuari i el control del lloc. Si s'estableix aquesta variable, els comandaments de simple paraula senzilla sense redireccions es tracten com a candidats per a la represa d'un treball aturat existent. No es permet cap ambigüitat; Si hi ha més d'una tasca iniciada amb la cadena mecanografiada, se selecciona la feina més recentment accessada. El nom d'un treball aturat, en aquest context, és la línia d'ordres utilitzada per iniciar-la. Si s'estableix en el valor exacte , la cadena proporcionada ha de coincidir exactament amb el nom d'un treball aturat; si s'estableix a la subcadena , la cadena proporcionada ha de coincidir amb una subcadena del nom d'un treball aturat. El valor de la subcadena proporciona una funcionalitat similar al %? identificador de feina (vegeu CONTROL DE TREBALL a continuació). Si s'estableix en qualsevol altre valor, la cadena proporcionada ha de ser un prefix del nom d'un treball deixat; això proporciona una funcionalitat similar a l'identificador % job.

histchars

Els dos o tres caràcters que controlen l'expansió de la història i la tokenització (vegeu HISTORIA EXPANSIÓ a continuació). El primer caràcter és el caràcter d' expansió de la història , el caràcter que indica l'inici d'una expansió de la història, normalment ' ! '. El segon caràcter és el caràcter de substitució ràpida , que s'utilitza com a abreviatura per tornar a executar la comanda anterior introduïda, substituint una cadena per una altra en la comanda. El valor predeterminat és ` ^ '. El tercer caràcter opcional és el caràcter que indica que la resta de la línia és un comentari quan es troba com el primer caràcter d'una paraula, normalment ' # '. El caràcter de comentari d'historial fa que la substitució de l'historial sigui saltada per les paraules restants a la línia. No fa que l'intèrpret d'ordres necessiti tractar la resta de la línia com a comentari.

Matrius

Bash proporciona variables de matriu unidimensionals. Qualsevol variable es pot utilitzar com a matriu; la declaració integrada declararà explícitament una matriu. No hi ha un límit màxim sobre la mida d'una matriu, ni cap requisit que els membres estiguin indexats o assignats de forma contigua. Les matrius es indexen utilitzant enters i són zero.

Una matriu es crea automàticament si hi ha alguna variable assignada a l'ús del nom de la sintaxi [ subscript ] = value . El subíndex es tracta com una expressió aritmètica que s'ha d'avaluar en un nombre major o igual que zero. Per declarar explícitament una matriu, useu declarar-un nom (vegeu SHELL BUILTIN COMMANDS a continuació). declare-a name [ subscript ] també és acceptat; el subíndex s'ignora. Els atributs es poden especificar per a una variable de matriu utilitzant els models declarats i readonly . Cada atribut s'aplica a tots els membres d'una matriu.

Les matrius s'assignen a utilitzar assignacions compostes del nom del formulari = ( valor 1 ... valor n ) , on cada valor és de la forma [ subíndex ] = cadena . Només es requereix una cadena . Si es proporcionen els claudàtors i subíndex opcionals, s'assigna aquest índex; en cas contrari l'índex de l'element assignat és l'últim índex assignat per la instrucció més un. La indexació comença a zero. Aquesta sintaxi també és acceptada per la declaració integrada. Es poden assignar elements de matriu individuals per utilitzar la sintaxi del nom [ subscript ] = value introduït anteriorment.

El builtin sense configurar s'utilitza per destruir matrius. El nom no assignat [ subíndex ] destrueix l'element de la matriu al subíndex d' índex. esborreu el nom , on el nom és una matriu o el nom desconegut [ subíndex ], on el subíndex és * o @ , elimina tota la matriu.

Els models declarats, locals i de lectura, accepten una opció-a per especificar una matriu. La lectura construïda accepta una opció-a per assignar una llista de paraules llegides de l'entrada estàndard a una matriu. El conjunt i declara builtins mostra valors de matriu d'una manera que els permet ser reutilitzats com assignacions.

EXPANSIÓ

L'expansió es realitza a la línia d'ordres després d'haver estat dividida en paraules. Hi ha set tipus d'expansió: expansió de lligadura , expansió de la tila , paràmetres i expansió variable , substitució de comandaments , expansió aritmètica , divisió de paraules i expansió de nom de ruta .

L'ordre d'expansió és: expansió de la soldadura, expansió de la tila, paràmetre, expansió variable i aritmètica i substitució de comandaments (realitzada de manera esquerra a dreta), la divisió de paraules i l'extensió del nom de la ruta.

En sistemes que poden suportar-lo, hi ha una expansió addicional disponible: substitució de processos .

Expansió de cèrcol

L'expansió de cèrcol és un mecanisme pel qual es poden generar cadenes arbitràries. Aquest mecanisme és similar a l' expansió del nom de la ruta , però els noms dels fitxers generats no necessiten existir. Els patrons que es faran expandits prenen la forma d'un preàmbul opcional, seguit d'una sèrie de cadenes separades per comes entre un parell de claus, seguit d'un postScript opcional. El preàmbul està prefixat a cada cadena continguda als claudàtors, i el postScript s'afegeix a cada cadena resultant, expandint-se d'esquerra a dreta.

Les ampliacions de claus poden estar anides. Els resultats de cada cadena expandida no estan ordenats; es conserva l'ordre d'esquerra a dreta. Per exemple, un { d, c, b } e s'expandeix a `ade as abe '.

L'expansió de la brida es realitza abans de qualsevol altra expansió, i es conserven els caràcters especials d'altres expansions en el resultat. És estrictament textual. Bash no aplica cap interpretació sintàctica al context de l'expansió o el text entre les claus.

Aquesta construcció normalment s'utilitza com a taquigrafia quan el prefix comú de les cadenes que es generarà és més llarg que l'exemple anterior:

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

o

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

L'expansió de suports presenta una lleugera incompatibilitat amb les versions històriques de sh . sh no tracta l'obertura ni el tancament de les claus especialment quan apareixen com a part d'una paraula i les conserva a la sortida. Bash elimina les claus de les paraules com a conseqüència de l'expansió de cèrcol. Per exemple, una paraula introduïda a sh com a fitxer {1,2} apareix de manera idèntica a la sortida. La mateixa paraula es mostra com file1 file2 després de l'expansió bash . Si es desitja una compatibilitat estricta amb sh , arrenqueu bash amb l'opció + B o desactiveu l'expansió de la clau amb l'opció + B a l'ordre set (vegeu SHELL BUILTIN COMMANDS a continuació).

Expansió de Tilde

Si una paraula comença amb un caràcter de caràcter no especificat (` ~ '), tots els caràcters que precedeixen la primera barra tallada (o tots els caràcters, si no hi ha una barra inclinada), es consideren un prefix de tilde . Si no es citen cap dels caràcters del prefix de tilde, els caràcters del prefix de tilde seguint la tilde es tracten com un possible nom d'inici de sessió . Si aquest nom d'usuari és la cadena nul·la, el tilde es reemplaça amb el valor del paràmetre shell HOME . Si la pàgina d'inici no es troba, el directori d'inici de l'usuari que executa l'intèrpret d'ordres està substituït al seu lloc. En cas contrari, el prefix de tilde es reemplaça amb el directori principal associat amb el nom d'inici de sessió especificat.

Si el prefix de tilde és un `~ + ', el valor de la variable PWD de la contrapartida substitueix el prefix de tilde. Si el prefix de tilde és un `~ - ', el substitueix la variable de la casella OLDPWD , si està establerta. Si els caràcters que segueixen el tilde en el prefix de tilde consten d'un número N , opcionalment prefixat per un `+ 'o un` -', el prefix de tilde es reemplaça amb l'element corresponent de la pila de directoris, tal com es visualitzaria per les ordres construïdes invocades amb el prefix de tilde com a argument. Si els caràcters que segueixen la tilde en el prefix de tilde consisteixen en un número sense un `+ 'o` -' principal, se suposa que '+'

Si el nom d'inici de sessió no és vàlid, o si l'expansió de la tilde falla, la paraula no es modifica.

Cada assignació de variables està marcada per prefixos de tonalitats no cotitzats immediatament seguint un : o = . En aquests casos, també es realitza l'expansió de la tila. En conseqüència, es pot utilitzar noms de fitxer amb tildes en assignacions a PATH , MAILPATH i CDPATH , i el shell assigna el valor expandit.

Expansió de paràmetres

El caràcter ` $ 'introdueix l'ampliació de paràmetres, la substitució de comandaments o l'expansió aritmètica. El nom o el símbol del paràmetre a expandir es pot incloure amb claus, que són opcionals, però serveixen per protegir la variable que s'expandeix de caràcters immediatament seguits que es podrien interpretar com a part del nom.

Quan s'utilitzen claudàtors, la clau de finalització coincident és la primera ` } 'no escapada per una barra invertida o dins d'una cadena citada, i no dins d'una expansió aritmètica incrustada, substitució de comandaments o expansió paramter.

El valor del paràmetre està substituït. Les claus són obligatòries quan el paràmetre és un paràmetre de posició amb més d'un dígit, o quan el paràmetre és seguit d'un caràcter que no s'ha d'interpretar com a part del seu nom.

En cadascun dels casos a continuació, la paraula està subjecta a l'expansió de la tila, l'expansió dels paràmetres, la substitució de comandaments i l'expansió aritmètica. Quan no es realitza l'expansió de la subcadena, proves bash per a un paràmetre que no es posa o nul; ometre el resultat de còlon en una prova només per a un paràmetre que es desactivi.

Utilitza valors predeterminats . Si el paràmetre no està definit o nul, l'extensió de la paraula està substituïda. En cas contrari, el valor del paràmetre està substituït.

Assigna valors predeterminats . Si el paràmetre no està definit o nul, l'extensió de paraula s'assigna al paràmetre . El valor del paràmetre serà substituït. Els paràmetres posicionals i els paràmetres especials no es poden assignar d'aquesta manera.

Error de visualització si és Null o Unset . Si el paràmetre és nul o no s'estableix, l'expansió de la paraula (o un missatge en aquest sentit si la paraula no està present) s'escriu a l'error estàndard i el shell, si no és interactiu, surt. En cas contrari, el valor del paràmetre està substituït.

Utilitza valor alternatiu . Si el paràmetre és nul o no s'estableix, no se substitueix res, en cas contrari, l'ampliació de la paraula està substituïda.

S'expandeix als noms de variables els noms comencen amb el prefix , separats pel primer caràcter de la variable especial IFS .

Es substitueix la longitud en caràcters del valor del paràmetre . Si el paràmetre és * o @ , el valor substituït és la quantitat de paràmetres de posició. Si el paràmetre és un nom de matriu subscrit per * o @ , el valor substituït és el nombre d'elements de la matriu.

La paraula s'expandeix per produir un patró igual que en l'expansió del nom de la ruta. Si el patró coincideix amb el principi del valor del paràmetre , el resultat de l'expansió és el valor expandit del paràmetre amb el patró de concordança més curt (el cas '' # '') o el patró de concordança més llarg (el `` ## ' "cas") suprimit. Si el paràmetre és @ o * , l'operació d'eliminació de patrons s'aplica a cada paràmetre de posició al seu torn, i l'expansió és la llista resultant. Si el paràmetre és una variable de matriu subscrita amb @ o * , l'operació de retirada de patrons s'aplica a cada membre de la matriu al seu torn, i l'expansió és la llista resultant.

La paraula s'expandeix per produir un patró igual que en l'expansió del nom de la ruta. Si el patró coincideix amb una part final del valor expandit del paràmetre , el resultat de l'expansió és el valor expandit del paràmetre amb el patró de concordança més curt (el cas `` % '' o el patró de coincidència més llarg (el `` % % '' cas) eliminat. Si el paràmetre és @ o * , l'operació d'eliminació de patrons s'aplica a cada paràmetre de posició al seu torn, i l'expansió és la llista resultant. Si el paràmetre és una variable de matriu subscrita amb @ o * , l'operació de retirada de patrons s'aplica a cada membre de la matriu al seu torn, i l'expansió és la llista resultant.

El patró s'expandeix per produir un patró igual que en l'expansió del nom de la ruta. El paràmetre s'expandeix i la part més llarga del patró en comparació amb el seu valor se substitueix per la cadena . En el primer formulari, només es reemplaça la primera coincidència. El segon formulari fa que totes les coincidències del patró siguin reemplaçades per la cadena . Si el patró comença amb # , ha de coincidir al principi del valor expandit del paràmetre . Si el patró comença amb % , ha de coincidir al final del valor expandit del paràmetre . Si la cadena és nul·la, s'eliminen les coincidències del patró i es pot ometre el / següent patró . Si el paràmetre és @ o * , l'operació de substitució s'aplica a cada paràmetre de posició al seu torn, i l'expansió és la llista resultant. Si el paràmetre és una variable de matriu subscrita amb @ o * , l'operació de substitució s'aplica a cada membre de la matriu al seu torn, i l'expansió és la llista resultant.

Substitució de comandaments

La substitució de comandaments permet que la sortida d'una ordre reemplaci el nom de la comanda. Hi ha dues formes:

$ ( ordre )

o

` command`

Bash realitza l'expansió executant l' ordre i reemplaça la substitució de comandaments amb la sortida estàndard de l'ordre, amb les línies noves finalitzades eliminades. Les línies noves incrustades no s'esborren, però es poden eliminar durant la divisió de paraules. La substitució de comandaments $ ( fitxer de cat ) es pot reemplaçar per l'equivalent però més ràpid $ (< fitxer ).

Quan s'utilitza la forma de substitució de backquote d'estil antic, la barra invertida conserva el seu significat literal, excepte quan se segueix $ , ` o \ . El primer backquote no precedit per una barra invertida finalitza la substitució de comandaments. Quan s'utilitza el formulari $ ( comanda ), tots els caràcters entre els parèntesis componen la comanda; cap es tracta especialment.

Es poden anidar les substitucions de comandaments. Per niar quan utilitzeu el formulari de backquoted, escapa dels backquotes interns amb barres inverses.

Si la substitució apareix dins de cometes dobles, la divisió de paraules i l'extensió del nom de la ruta no es realitzen als resultats.

Expansió aritmètica

L'expansió aritmètica permet avaluar una expressió aritmètica i la substitució del resultat. El format per a l'expansió aritmètica és:

$ (( expressió ))

L' expressió es tracta com si estigués dins de cometes dobles, però no es tracta una cita doble dins dels parèntesis. Tots els tokens de l'expressió són objecte d'ampliació de paràmetres, expansió de cadena, substitució de comandaments i eliminació de quotes. Es poden anidar les substitucions aritmètiques.

L'avaluació es realitza d'acord amb les regles que es detallen a continuació sota AVALUACIÓ ARITÈMICA . Si l' expressió no és vàlida, bash imprimeix un missatge que indica un error i no es produeix cap substitució.

Substitució del procés

La substitució de processos és compatible amb sistemes que admeten canonades amb nom ( FIFO ) o el mètode / dev / fd de nomenar fitxers oberts. Pren la forma de <( llista ) o > ( llista ) . La llista de processos s'executa amb la seva entrada o sortida connectada a un FIFO o algun fitxer a / dev / fd . El nom d'aquest fitxer es transmet com a argument a l'ordre actual com a resultat de l'expansió. Si s'utilitza el formulari ( llista ) , escriure al fitxer proporcionarà una entrada per a la llista . Si s'utilitza el formulari <( llista ) , s'ha de llegir el fitxer com a argument per obtenir la sortida de la llista .

Quan estigui disponible, la substitució de processos es realitza simultàniament amb paràmetres i expansió variable, substitució de comandaments i expansió aritmètica.

Paraula de divisió

El shell explora els resultats de l'expansió de paràmetres, la substitució de comandaments i l'expansió aritmètica que no es van produir en les cometes dobles per a la divisió de paraules .

La closca tracta cada caràcter de IFS com a delimitador, i divideix els resultats de les altres expansions en paraules d'aquests caràcters. Si IFS no es troba o el seu valor és exactament , el valor predeterminat, qualsevol seqüència de caràcters IFS serveix per delimitar paraules. Si IFS té un valor diferent al predeterminat, les seqüències de l' espai i la pestanya dels espais en blanc s'ignoren al principi i al final de la paraula, sempre que el caràcter de l'espai en blanc es trobi en el valor IFS (un caràcter d'espai en blanc IFS ). Qualsevol caràcter d' IFS que no sigui l'espai en blanc IFS , juntament amb els caràcters d'espai en blanc de IFS adjacents, delimita un camp. Una seqüència de caràcters d'espai en blanc IFS també es tracta com un delimitador. Si el valor de IFS és nul, no es produeix cap divisió de paraules.

Es mantenen arguments nets explícits ( "" o "" ). S'eliminen els arguments nuls implícits no ordenats, derivats de l'expansió de paràmetres que no tenen valors. Si un paràmetre sense valor s'expandeix dins de les cometes dobles, es genera un argument nul i es conserva.

Tingueu en compte que, si no es produeix cap expansió, no es realitza cap divisió.

Expansió de nom del camí

Després de la divisió de paraules, tret que l'opció -f s'hagi establert, bash escaneja cada paraula per als caràcters * ,? , i [ . Si apareix un d'aquests caràcters, la paraula es considera un patró i es reemplaça per una llista ordenada alfabèticament de noms de fitxers que coincideixin amb el patró. Si no es troba cap nom de fitxer coincident i la opció shell shell null està desactivada, la paraula es manté inalterada. Si s'estableix l' opció nullglob i no es troben coincidències, la paraula s'elimina. Si l'opció shell shell nocaseglob està habilitada, la coincidència es realitza sense tenir en compte el cas dels caràcters alfabètics. Quan s'utilitza un patró per a l'expansió del nom de la ruta, el caràcter ``. '' Al començament d'un nom o immediatament després d'una barra inclinada ha de coincidir explícitament, tret que s'estableixi l'opció shell dotglob . Quan coincideixin amb un nom de ruta, el caràcter barra sempre ha de coincidir explícitament. En altres casos, el caràcter ``. '' No es tracta especialment. Vegeu la descripció del botó de sota a SHELL BUILDING COMMANDS per obtenir una descripció de les opcions de shell nocaseglob , nullglob i dotglob .

La variable shell de GLOBIGNORE es pot utilitzar per restringir el conjunt de noms de fitxers que coincideixin amb un patró . Si s'estableix GLOBIGNORE , cada nom de fitxer coincident que coincideix amb un dels patrons de GLOBIGNORE s'elimina de la llista de coincidències. Els noms de fitxer ``. '' I `` .. '' sempre s'ignoren, fins i tot quan s'estableix GLOBIGNORE . Tanmateix, configurar GLOBIGNORE té l'efecte d'habilitar l'opció shell de dotglob , de manera que tots els altres noms de fitxers que comencin amb un ``. '' Coincidiran. Per obtenir el vell comportament d'ignorar noms de fitxers que comencen amb un ``. '' , Feu que ``. * '' Sigui un dels patrons de GLOBIGNORE . L'opció de punt de connexió està desactivada quan GLOBIGNORE no està desactivada.

Patronatge a joc

Qualsevol caràcter que aparegui en un patró, a part dels caràcters especials del patró que es descriuen a continuació, es correspon amb ell mateix. És possible que el caràcter NUL no es produeixi en un patró. Els caràcters especials del patró s'han de citar si es volen emprar literalment.

Els caràcters especials del patró tenen els significats següents:

*

Coincideix amb qualsevol cadena, inclosa la cadena nul·la.

?

Coincideix amb qualsevol caràcter.

[...]

Coincideix amb qualsevol dels caràcters tancats. Un parell de caràcters separats per un guió denota una expressió de rang ; qualsevol caràcter que es classifiqui entre aquests dos caràcters, incloent, utilitzant la seqüència de recopilació de la localització actual i el conjunt de caràcters, coincideix. Si el primer caràcter següent a [ és a ! o a ^ llavors qualsevol caràcter no tancat coincideix. L'ordre de classificació dels caràcters en expressions de rang està determinat per la localització actual i el valor de la variable de shell LC_COLLATE , si s'estableix. A - es pot combinar incloent-lo com el primer o últim caràcter del conjunt. A ] es pot combinar incloent-lo com el primer caràcter del conjunt.

Dins [ i ] , les classes de caràcters es poden especificar utilitzant la sintaxi [: classe :] , on la classe és una de les següents classes definides en l'estàndard POSIX.2:

alnum alpha ascii blank cntrl dígit gràfic inferior impressió punct space paraula superior xdigit
Una classe de caràcters coincideix amb qualsevol caràcter pertanyent a aquesta classe. La classe de caràcters de paraula coincideix amb lletres, dígits i el caràcter _.

Dins [ i ] , es pot especificar una classe d'equivalència utilitzant la sintaxi [= c =] , que coincideix amb tots els caràcters amb el mateix pes de col·lació (tal com el defineix la localització actual) com a caràcter c .

Dins de [ i ] , la sintaxi [. símbol .] coincideix amb el símbol de símbol de la combinació.

Si l'opció Shell Extglob està habilitada usant el built- in de la botiga , es reconeixen diversos operadors de concordança de patrons ampliats. A la descripció següent, una llista de patrons és una llista d'un o més patrons separats per a | . Es poden formar patrons compostos utilitzant un o més dels següents patrons secundaris:

? ( llista de patrons )

Coincideix amb zero o amb una ocurrència dels patrons donats

* ( llista de patrons )

Coincideix amb zero o més aparicions dels patrons donats

+ ( llista de patrons )

Coincideix amb una o més aparicions dels patrons donats

@ ( llista de patrons )

Coincideix exactament amb un dels patrons donats

! ( llista de patrons )

Coincideix amb qualsevol cosa excepte un dels patrons donats

Eliminació de pressupostos

Després de les ampliacions anteriors, s'eliminen totes les aparicions no registrades dels caràcters \ , ' i " que no es deriven d'una de les expansions anteriors.

REDIRECTION

Abans que s'executi una comanda, la seva entrada i sortida es pot redirigir utilitzant una notació especial interpretada per l'intèrpret d'ordres. La redirecció també es pot utilitzar per obrir i tancar fitxers per a l'entorn d'execució de la shell actual. Els següents operadors de redirecció poden precedir o aparèixer en qualsevol lloc dins d'un comandament senzill o bé seguir un ordre . Les redireccions es processen en l'ordre que apareixen, d'esquerra a dreta.

A les descripcions següents, si s'omet el nombre del descriptor de fitxer i el primer caràcter de l'operador de redirecció < , la redirecció fa referència a l'entrada estàndard (descriptor de fitxer 0). Si el primer caràcter de l'operador de redirecció és > , la redirecció fa referència a la sortida estàndard (descriptor de fitxer 1).

La paraula següent a l'operador de redirecció a les descripcions següents, tret que s'indiqui el contrari, està sotmesa a expansió de bloqueig, expansió de tilde, expansió de paràmetres, substitució de comandaments, expansió aritmètica, eliminació de quotes, expansió de ruta i divisió de paraules. Si s'expandeix a més d'una paraula, bash informa d'un error.

Tingueu en compte que l'ordre de redireccions és significatiu. Per exemple, l'ordre

ls > dirlist 2 > & 1

dirigeix ​​tant la sortida estàndard com l'error estàndard al fitxer dirlist , mentre que l'ordre

ls 2 > i 1 > dirlist

dirigeix ​​només la sortida estàndard al fitxer dirlist , ja que l'error estàndard es va duplicar com a sortida estàndard abans de redirigir la sortida estàndard a dirlist .

Bash maneja diversos noms de fitxers, especialment quan s'utilitzen en redireccions, tal com es descriu a la taula següent:

/ dev / fd / fd

Si fd és un enter vàlid, el fitxer descriptor fd es duplica.

/ dev / stdin

El fitxer descriptor 0 està duplicat.

/ dev / stdout

El fitxer descriptor 1 està duplicat.

/ dev / stderr

El descriptor de fitxer 2 es duplica.

/ dev / tcp / host / port

Si l' amfitrió és un nom d'amfitrió vàlid o adreça d'Internet, i el port és un número de port enter o nom de servei, bash intenta obrir una connexió TCP al socket corresponent.

/ dev / udp / host / port

Si l' amfitrió és un nom d'amfitrió vàlid o una adreça d'Internet, i el port és un número de port enter o nom de servei, bash intenta obrir una connexió UDP al socket corresponent.

Si no s'obre o es crea un fitxer, la redirecció fallarà.

Redirigint l'entrada

La redirecció d'entrada provoca que l'arxiu el nom de el qual provingui de l'expansió de la paraula que s'obri per llegir al descriptor de fitxer n , o l'entrada estàndard (descriptor de fitxer 0) si no s'especifica n .

El format general per redirigir l'entrada és:

[ n ] < paraula

Redirigint la sortida

La redirecció de la sortida fa que l'arxiu el nom de el qual provingui de l'expansió de la paraula que s'obri per escriure al descriptor de fitxer n , o la sortida estàndard (descriptor de fitxer 1) si no s'especifica n . Si el fitxer no existeix, es crea; si existeix, es trunca a zero.

El format general per redirigir la sortida és:

[ n ] > paraula

Si l'operador de redirecció és > , i l'opció noclobber al conjunt builtin s'ha habilitat, la redirecció fallarà si el fitxer del qual el nom prové de l'expansió de la paraula existeix i és un fitxer normal. Si l'operador de redirecció és > | , o l'operador de redirecció és > i l'opció noclobber a la comanda set builtin no està habilitada, la redirecció es prova encara que existeixi el fitxer anomenat per paraula .

S'està afegint la sortida redirigida

La redirecció de la producció d'aquesta manera provoca que l'arxiu el nom de el qual provingui de l'expansió de la paraula que s'obri per afegir en el descriptor de fitxer n , o la sortida estàndard (descriptor de fitxer 1) si no s'especifica n . Si el fitxer no existeix, es crea.

El format general per afegir la sortida és:

[ n ] >> paraula

Redirigint la sortida estàndard i l'error estàndard

Bash permet que la sortida estàndard (descriptor de fitxer 1) i la sortida estàndard d'error (descriptor de fitxer 2) siguin redirigits al fitxer el nom del qual és l'expansió de la paraula amb aquesta construcció.

Hi ha dos formats per redirigir la sortida estàndard i l'error estàndard:

&> paraula

i

> i paraula

De les dues formes, es prefereix la primera. Això és semànticament equivalent

> paraula 2 > i 1

Aquí els documents

Aquest tipus de redirecció indica al shell que llegeixi l'entrada de la font actual fins que es vegi una línia que contingui només una paraula (sense finestres en blanc). Totes les línies llegides fins a aquest punt s'utilitzen com a entrada estàndard per a una ordre.

El format d'aquest document és:

<< [ - ] paraula aquí- delimitador de document

Cap expansió de paràmetre, substitució de comanda, expansió aritmètica o extensió de ruta de ruta es realitza a la paraula . Si es citen alguns caràcters de paraula , el delimitador és el resultat de l'eliminació de quotes en paraula , i les línies del document aquí no s'expandeixen. Si la paraula no està seleccionada, totes les línies del document aquí estan subjectes a l'expansió dels paràmetres, la substitució de comandaments i l'expansió aritmètica. En aquest últim cas, la seqüència de caràcters \ s'ignora, i \ ha de ser usada per a citar els caràcters \ , $ i ` .

Si l'operador de redirecció és << - , a continuació, tots els caràcters de la pestanya principals es despullen de les línies d'entrada i de la línia que conté delimitador . Això permet que aquí els documents de les seqüències d'ordres de shell siguin sagnats de manera natural.

Aquí cadenes

Una variant d'aquí documents, el format és:

<<< paraula

La paraula s'expandeix i es subministra a la comanda en la seva entrada estàndard.

Duplicar els descriptors de fitxers

L'operador de redirecció

[ n ] paraula

s'utilitza per duplicar els descriptors d'arxius d'entrada. Si la paraula s'expandeix a un o més dígits, el descriptor de fitxer denotat per n es fa com una còpia d'aquest descriptor de fitxer. Si els dígits a la paraula no especifiquen un descriptor de fitxer obert per a l'entrada, es produeix un error de redirecció. Si la paraula s'avalua a - , el descriptor descriptor de fitxers està tancat. Si n no s'especifica, s'utilitza l'entrada estàndard (descriptor de fitxer 0).

L'operador

[ n ] > i paraula

s'utilitza de manera similar als descriptors de fitxers de sortida duplicats. Si n no s'especifica, s'utilitza la sortida estàndard (descriptor de fitxer 1). Si els dígits a la paraula no especifiquen un descriptor de fitxer obert per a la sortida, es produeix un error de redirecció. Com a cas especial, si n s'omet, i la paraula no s'expandeix a un o més dígits, la sortida estàndard i l'error estàndard es redirigeixen tal com s'ha descrit anteriorment.

Descriptors de fitxers en moviment

L'operador de redirecció

[ n ] dígits -

mou el descriptor del descriptor de fitxer al descriptor de fitxer n , o l'entrada estàndard (descriptor de fitxer 0) si no s'especifica n . El dígit es tanca després de duplicar-se a n .

De la mateixa manera, l'operador de redirecció

[ n ] > i dígits -

mou el descriptor del descriptor de fitxer al descriptor de fitxer n , o la sortida estàndard (descriptor de fitxer 1) si no s'especifica n .

Obertura de descriptors d'arxius per llegir i escriure

L'operador de redirecció

[ n ] <> paraula

fa que l'arxiu el nom del qual sigui l'expansió de la paraula que s'obri tant per a lectura com per escrit en el descriptor de fitxer n , o en el descriptor de fitxer 0 si no s'especifica n . Si el fitxer no existeix, es crea.

ALIASES

Els àlies permeten substituir una cadena per una paraula quan s'utilitza com a primera paraula d'un comandament simple. L'intèrpret d'ordres manté una llista d'àlies que es poden establir i desmarcar amb l' àlies i les ordres integrades integrades (vegeu SHELL BUILTIN COMMANDS a continuació). La primera paraula de cada comanda, si no està seleccionada, es comprova si té un àlies. Si és així, aquesta paraula se substitueix pel text de l'àlies. El nom del àlies i el text del reemplaçament poden contenir cap entrada de shell vàlida, inclosos els metacarapes que figuren més amunt, amb l'excepció que el nom d'àlies no contingui. La primera paraula del text de reemplaçament es prova per als àlies, però una paraula que és idèntica a un àlies que s'expandeix no s'amplia una segona vegada. Això vol dir que un pot fer-ho a ls -F , per exemple, i bash no intenta ampliar recursivament el text de reemplaçament. Si l'últim caràcter del valor del àlies és un blanc , llavors també es verifica la propera paraula de comanda que segueix l'àlies per a l'expansió d'àlies.

Els àlies es creen i s'enumeren amb l'ordre d' àlies , i es treuen amb l'ordre unalias .

No hi ha cap mecanisme per utilitzar arguments en el text de reemplaçament. Si es necessiten arguments, s'ha d'utilitzar una funció de shell (vegeu FUNCIONS a continuació).

Els àlies no s'amplien quan l'intèrpret d'ordres no és interactiu, tret que s'estableixi l' opció de compressió expand_aliases utilitzant shopt (vegeu la descripció de shopt sota SHELL BUILTIN COMMANDS a continuació).

Les regles relatives a la definició i l'ús d'àlies són una miqueta confuses. Bash sempre llegeix almenys una línia d'entrada completa abans d'executar qualsevol dels comandaments d'aquesta línia. Els àlies s'expandeixen quan es llegeix una ordre, no quan s'executa. Per tant, una definició d'àlies que apareix a la mateixa línia que un altre comandament no té efecte fins que es llegeix la següent línia d'entrada. Les comandes que segueixen la definició d'àlies en aquesta línia no es veuen afectades pel nou àlies. Aquest comportament també és un problema quan s'executen funcions. Els àlies s'expandeixen quan es llegeix una definició de funció, no quan la funció s'executa, perquè una definició de funció és en si mateixa un comandament compost. Com a conseqüència, els àlies definits en una funció no estan disponibles fins que s'executi aquesta funció. Per estar segur, poseu sempre definicions d'àlies en una línia separada i no feu servir àlies en comandaments compostos.

Per gairebé tots els propòsits, els àlies són substituïts per funcions de shell.

FUNCIONS

Una funció de shell, definida com es descriu anteriorment a SHELL GRAMMAR , emmagatzema una sèrie d'ordres per a una posterior execució. Quan el nom d'una funció de shell s'utilitza com a nom de comanda simple, s'executa la llista de comandaments associats amb aquest nom de funció. Les funcions s'executen en el context del shell actual; no es crea cap procés nou per interpretar-los (contrasta això amb l'execució d'un script shell). Quan s'executa una funció, els arguments a la funció es converteixen en els paràmetres de posició durant la seva execució. El paràmetre especial # s'actualitza per reflectir el canvi. El paràmetre posicional 0 no es modifica. La variable FUNCNAME s'estableix en el nom de la funció mentre s'està executant la funció. Tots els altres aspectes de l'entorn d'execució de l'intèrpret d'ordres són idèntics entre una funció i la seva persona que truca, amb l'excepció que la trampa DEBUG (vegeu la descripció de la trampa incorporada a SHELL BUILTIN COMMANDS a continuació) no s'hereta tret que la funció hagi estat atribuïda vegeu la descripció de la declaració construïda a continuació).

Les variables locals de la funció es poden declarar amb l'ordre builtin local . Normalment, les variables i els seus valors es comparteixen entre la funció i la seva persona que truca.

Si el retorn de la comanda integrada s'executa en una funció, la funció es completa i l'execució es reprèn amb l'ordre següent després de la trucada de funció. Quan es completa una funció, els valors dels paràmetres de posició i el paràmetre especial # es restauren als valors que tenien abans de l'execució de la funció.

Els noms i les definicions de funcions es poden incloure amb l'opció -f a les ordres declarades o tipificades . L'opció -F per declarar o escriure enumerarà només els noms de funció. Les funcions es poden exportar de manera que subshells els defineixi automàticament amb l'opció -f a l' exportació incorporada.

Les funcions poden ser recursives. No s'imposa cap límit al nombre de trucades recursives.

AVALUACIÓ ARITÈMICA

L'intèrpret d'ordres permet avaluar les expressions aritmètiques, en determinades circumstàncies (vegeu la comanda let builtin i Expansió aritmètica ). L'avaluació es realitza en enters sencers sense comprovar el desbordament, tot i que la divisió per 0 està atrapada i es marca com un error. Els operadors i la seva prioritat i associativitat són els mateixos que en el llenguatge C. La següent llista d'operadors s'agrupen en nivells d'operadors de prioritat igual. Els nivells es classifiquen per ordre de prioritat decreixent.

ID id + id -

variable post-increment i post-decrement

ID de + id

preincrement variable i pre-decrement

- +

unari menys i més

! ~

negació lògica i bit a bit

**

exponenciació

* /%

multiplicació, divisió, resta

+ -

suma, resta

<< >>

esquerra i dreta els canvis de bit a bit

<=> = <>

comparació

==! =

igualtat i desigualtat

&

bit a AND

^

OR exclusiu bit a bit

|

OR bit a bit

&&

AND lògic

||

OR lògic

expr ? expr : expr

avaluació condicional

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

cessió

expr1 , expr2

coma

Les variables de shell es permeten com a operands; l'expansió del paràmetre es realitza abans de l'avaluació de l'expressió. Dins d'una expressió, les variables de shell també es poden fer referència al nom sense utilitzar la sintaxi d'expansió dels paràmetres. El valor d'una variable s'avalua com una expressió aritmètica quan es fa referència. Una variable de closca no necessita que el seu atribut sencer estigui activat per ser utilitzat en una expressió.

Les constants amb un 0 principal s'interpreten com a nombres octals. Un 0x líder o 0X indica hexadecimal. En cas contrari, els nombres prenen la forma [ base # ] n, on la base és un nombre decimal entre 2 i 64 que representa la base aritmètica, i n és un número en aquesta base. Si s'omet la base # , s'utilitza la base 10. Els dígits majors de 9 estan representats per lletres minúscules, majúscules, @ i _, en aquest ordre. Si la base és inferior o igual a 36, ​​les majúscules i minúscules es poden utilitzar de manera intercanviable per representar els números entre 10 i 35.

Els operadors s'avaluen per ordre de prioritat. Les subexpressions entre parèntesis s'avaluen primer i poden anul·lar les regles de precedència anteriors.

EXPRESSIONS CONDICIONALS

Les expressions condicionals són utilitzades per l'ordre [[ command compost i la prova i [ ordres integrades per provar els atributs de fitxers i realitzen comparacions de cadena i aritmètica. Les expressions es formen a partir de les primàries unàries o binàries següents. Si qualsevol argument d' arxiu en una de les primàries és de la forma / dev / fd / n , es comprova el descriptor n de l' arxiu n . Si l'argument de fitxer a una de les primàries és un de / dev / stdin , / dev / stdout , o / dev / stderr , el descriptor de fitxer 0, 1 o 2, respectivament, està marcada.

-un fitxer

Cert si el fitxer existeix.

-b fitxer

Cert si el fitxer existeix i és un fitxer especial de bloc.

-c fitxer

Cert si el fitxer existeix i és un fitxer especial de caràcter.

-d fitxer

Cert si el fitxer existeix i és un directori.

-e fitxer

Cert si el fitxer existeix.

-f fitxer

Cert si el fitxer existeix i és un fitxer normal.

-g fitxer

Cert si el fitxer existeix i està configurada com a grup id.

-h fitxer

Cert si el fitxer existeix i és un enllaç simbòlic.

-k fitxer

Cert si el fitxer existeix i el bit `` sticky '' està establert.

-p fitxer

És veritat si existeix un fitxer i és una canonada amb nom (FIFO).

-r fitxer

Cert si el fitxer existeix i es pot llegir.

-s fitxer

Cert si el fitxer existeix i té una mida major que zero.

-t fd

És cert si el descriptor de fitxer fd està obert i es refereix a un terminal.

-un fitxer

És vertader si existeix un fitxer i s'estableix el bit id-set-user-id.

-w fitxer

Cert si el fitxer existeix i es pot escriure.

-x arxiu

Cert si el fitxer existeix i és executable.

-O fitxer

Cert si el fitxer existeix i és propietat de l'identificador d'usuari efectiu.

-G fitxer

Cert si el fitxer existeix i és propietat de l'id del grup efectiu.

-L fitxer

Cert si el fitxer existeix i és un enllaç simbòlic.

-S fitxer

Cert si el fitxer existeix i és un socket.

-N fitxer

Cert si el fitxer existeix i s'ha modificat des que es va llegir per darrera vegada.

file1 - nt file2

És cert si file1 és més recent (segons la data de modificació) que file2 , o si file1 existeix i file2 no.

file1 - ot file2

És cert si file1 és anterior a file2 , o si file2 existeix i file1 no.

arxiu1- fitxer d' arxiu2

És cert si file1 i file2 es refereixen al mateix dispositiu i als nodes d'inode.

-o optname

És cert si està habilitat l'opció d'opció de la casella de selecció . Vegeu la llista d'opcions sota la descripció de l'opció-o al conjunt que s'indica a continuació.

-z cadena

És veritat si la longitud de la cadena és zero.

-n cadena

cadena

És veritat si la longitud de la cadena no és zero.

string1 == cadena2

És veritat si les cadenes són iguals. = pot ser usat en lloc de == per a un compliment estricte de POSIX.

string1 ! = cadena2

És veritat si les cadenes no són iguals.

cadena1 < cadena2

És cert si string1 ordena abans string2 lexicogràficament a la localització actual.

string1 > cadena2

És cert si string1 ordena després de string2 lexicogràficament a la localització actual.

arg1 OP arg2

OP és una de -eq , -ne , -lt , -le , -gt , o -ge . Aquests operadors binaris aritmètics es tornen vertaders si arg1 és igual a, menys que, inferior o igual a, superior o igual que arg2 , respectivament. Arg1 i arg2 poden ser enters enters positius o negatius.

EXPANSIÓ SIMPLE COMMAND

Quan s'executa una ordre simple, el shell realitza les següents expansions, assignacions i redireccions, d'esquerra a dreta.

1.

Les paraules que l'analitzador ha marcat com assignacions variables (les que precedeixen al nom de la comanda) i les redireccions es guarden per a processament posterior.

2.

Les paraules que no són assignacions variables o redireccions s'expandeixen. Si hi ha paraules restants després de l'expansió, es pren la primera paraula com el nom del comandament i les paraules restants són els arguments.

3.

Les redireccions es realitzen tal i com s'ha descrit anteriorment a REDIRECTION .

4.

El text després de la = en cada assignació de variables passa per l'expansió de la tila, l'ampliació de paràmetres, la substitució de comandaments, l'expansió aritmètica i l'eliminació de quotes abans d'assignar-la a la variable.

Si no hi ha cap nom de comanda, les assignacions de variables afecten l'entorn de la shell actual. En cas contrari, les variables s'agreguen a l'entorn de l'ordre executada i no afecten l'entorn de la shell actual. Si alguna de les assignacions intenta assignar un valor a una variable llegible, es produeix un error, i l'ordre surt d'un estat sense zero.

Si no hi ha cap nom de comanda, es realitzen les redireccions, però no afecten l'entorn del shell actual. Un error de redirecció fa que l'ordre surti amb un estat que no sigui de zero.

Si hi ha un nom de comanda que queda després de l'expansió, l'execució procedirà com es descriu a continuació. En cas contrari, la comanda surt. Si una de les expansions contenia una substitució de comandaments, l'estat de sortida de la comanda és l'estat de sortida de la última substitució de comandaments realitzada. Si no hi ha cap substitució de comandaments, l'ordre surt amb un estat de zero.

EXECUCIÓ DE COMANDA

Després d'haver dividit una ordre en paraules, si es produeix una ordre senzilla i una llista opcional d'arguments, es prenen les accions següents.

Si el nom de l'ordre no conté cap barra inclinada, el intèrpret de comandaments intenta localitzar-lo. Si hi ha una funció de shell per aquest nom, aquesta funció s'invoca tal com s'ha descrit anteriorment a FUNCTIONS . Si el nom no coincideix amb una funció, el cercador ho cerqui a la llista d'intèrprets integrats de shell. Si es troba una coincidència, s'inclou a la construïda.

Si el nom no és ni una funció de shell ni una interfície integrada, i no conté cap barra inclinada, bash busca cada element de la PATH per a un directori que contingui un fitxer executable amb aquest nom. Bash utilitza una taula hash per recordar els noms de ruta complets dels fitxers executables (vegeu el hash a SHELL BUILTIN COMMANDS a continuació). Una cerca completa dels directoris en PATH es realitza només si l'ordre no es troba a la taula hash. Si la recerca no té èxit, el shell imprimeix un missatge d'error i retorna un estat de sortida de 127.

Si la cerca és correcta, o si el nom de l'ordre conté una o més barres, la casella executa el programa anomenat en un entorn d'execució independent. L'argument 0 s'estableix en el nom indicat, i els arguments restants a la comanda s'estableixen als arguments donats, si n'hi ha.

Si aquesta execució falla perquè el fitxer no està en format executable, i el fitxer no és un directori, se suposa que és un script de shell , un fitxer que conté ordres de shell. Es genera un subshell per executar-lo. Aquest subshell es reinicialitza, de manera que l'efecte és com si s'hagués invocat un nou intèrpret d'ordres per manipular el script, amb l'excepció que el nen conserva les ubicacions de les ordres que recorden els pares (vegeu el hash a sota de SHELL BUILTIN COMMANDS ).

Si el programa és un fitxer que comença amb #! , la resta de la primera línia especifica un intèrpret per al programa. El shell executa l'intèrpret especificat en sistemes operatius que no manegen aquest format executable ells mateixos. Els arguments a l'intèrpret consisteixen en un únic argument opcional seguint el nom de l'intèrpret a la primera línia del programa, seguit del nom del programa, seguit dels arguments d'ordre, si n'hi ha.

EXECUCIÓ DEL COMANDAMENT MEDI AMBIENT

El shell té un entorn d'execució , que consisteix en el següent:

*

obriu els fitxers heretats per l'intèrpret d'ordres a invocació, tal com ho modifiquen les redireccions subministrades al fitxer exec

*

el directori de treball actual establert per cd , pushd o popd , o heretada pel shell en invocació

*

la màscara del mode de creació de fitxers establerta per umask o heredada del pare del shell

*

trampes actuals establertes per trampa

*

els paràmetres de shell que s'estableixen per assignació de variables o amb el conjunt o heretat dels pares del shell en l'entorn

*

funcions de shell definides durant l'execució o heretats dels pares del shell en l'entorn

*

opcions habilitades a invocació (ja sigui per defecte o amb arguments de línia de comandaments) o per configuració

*

opcions habilitades per shopt

*

àlies de capes definides amb àlies

*

diversos ID de processos, inclosos els de treballs en segon pla, el valor de $$ i el valor de $ PPID

Quan s'executa una ordre simple que no sigui una funció integrada o shell, s'invoca en un entorn d'execució independent que consisteix en el següent. A menys que s'indiqui el contrari, els valors es hereten del shell.

*

els fitxers oberts de la shell, a més de les modificacions i addicions especificades per les redireccions a la comanda

*

el directori de treball actual

*

la màscara del mode de creació de fitxers

*

les variables de shell marcades per a l'exportació, juntament amb les variables exportades per al comandament, passades a l'entorn

*

les trampes capturades per l'intèrpret d'ordres es restableixen als valors heretats del progenitor del comandament i les trampes ignorades per l'intèrpret d'ordres s'ignoren

Una ordre invocada en aquest entorn diferent no pot afectar l'entorn d'execució de l'intèrpret d'ordres.

Les ordres asincròniques i de substitució de comandaments són invocades en un entorn de subshell que és un duplicat de l'entorn de shell, excepte que les trampes atrapades per l'intèrpret d'ordres es restableixen als valors que l'intèrpret heretat dels seus pares en la invocació. Les ordres integrades que s'invien com a part d'un oleoducte també s'executen en un entorn subshell. Els canvis realitzats a l'entorn Subshell no poden afectar l'entorn d'execució de l'intèrpret d'ordres.

Si un comandament és seguit d'un control de & i de treball no està actiu, l'entrada estàndard predeterminada per al comandament és el fitxer buit / dev / null . En cas contrari, la comanda invocada hereta els descriptors de fitxers del intèrpret d'ordres tal com ho modifiquen les redireccions.

VEGEU TAMBÉ

Manual de referència de Bash , Brian Fox i Chet Ramey

Biblioteca de Gnu Readline , Brian Fox i Chet Ramey

La Biblioteca d'Història de Gnu , Brian Fox i Chet Ramey

Interfície de sistema operatiu portàtil (POSIX) Part 2: Shell and Utilities , IEEE

sh (1), ksh (1), csh (1)

emacs (1), vi (1)

readline (3)