Sh - Comando Linux - Comando Unix

NAME

bash - GNU Bourne-Again SHell

SINOPSE

bash [opcións] [ficheiro]

DESCRICIÓN

Bash é un intérprete de linguaxe de comando compatible con sh que executa comandos lidos desde a entrada estándar ou desde un ficheiro. Bash tamén incorpora funcións útiles das versións Korn e C ( ksh e csh ).

Bash pretende ser unha implementación conformante da especificación Shell and Tools de IEEE POSIX (IEEE Working Group 1003.2).

OPCIÓNS

Ademais das opcións de shell de carácter único documentadas na descrición do comando set builtin, bash interpreta as seguintes opcións cando se invoca:

-c cadea

Se a opción -c está presente, os comandos son lidos da cadea . Se hai argumentos despois da cadea , asignáronse aos parámetros de posición, comezando con $ 0 .

-i

Se a opción -i está presente, o shell é interactivo .

-l

Faga o acto de bash como se fose invocado como un intérprete de inicio de sesión (consulte INVOCATION a continuación).

-r

Se a opción -r está presente, o shell converterase restrinxido (consulte SHELL RESTRINGIDO a continuación).

-s

Se a opción -s está presente, ou se non hai ningún argumento que permanece despois do procesamento de opci ≤ n, as ordes son lidas desde a entrada est 谩 ndica. Esta opción permite definir os parámetros de posición ao invocar un shell interactivo.

-D

A lista de todas as cadeas con dúas cores precedidas por $ está imprimida na ouput estándar. Estas son as cadeas que están suxeitas á tradución da lingua cando a localización actual non é C ou POSIX . Isto implica a opción -n ; non se executarán comandos.

[- +] O [ shopt_option ]

shopt_option é unha das opcións de shell aceptadas polo shopt builtin (consulte SHELL BUILDING COMMANDS a continuación). Se a opción shopt_ está presente, -O establece o valor desa opción; + O desconéctalo. Se non se fornece shopt_option , os nomes e os valores das opcións de shell aceptados polo shopt están impresos na saída estándar. Se a opción de invocación é + O , a saída amósase nun formato que pode ser reutilizado como entrada.

A - sinala o final das opcións e desactiva o proceso de opción adicional. Calquera argumento despois do - son tratados como nomes de ficheiro e argumentos. Un argumento de - é equivalente a - .

Bash tamén interpreta varias opcións de carácter múltiple. Estas opcións deben aparecer na liña de comando antes de que se recoñezan as opcións dun único carácter.

--dump-po-strings

É equivalente a -D , pero a saída está no formato de ficheiro GNU gettext po (obxecto portátil).

--dump-strings

Equivalente a -D .

- axuda

Mostrar unha mensaxe de uso na saída estándar e saír con éxito.

- ficheiro ficheiro inicial

- arquivo de arquivo

Executa comandos do ficheiro no canto do ficheiro de inicialización persoal estándar ~ / .bashrc se o shell é interactivo (consulte INVOCATION a continuación).

--Iniciar sesión

Equivalente a -l .

--noediting

Non empregue a biblioteca do readline de GNU para ler liñas de comando cando o shell é interactivo.

--noprofile

Non lea nin o ficheiro de inicio / etc / profile en todo o sistema nin ningún dos ficheiros de inicialización persoal ~ / .bash_profile , ~ / .bash_login , ou ~ / .profile . Por defecto, bash le estes ficheiros cando é invocado como un intérprete de inicio de sesión (consulte INVOCATION a continuación).

--norc

Non lea e execute o ficheiro de inicialización persoal ~ / .bashrc se o shell é interactivo. Esta opción está activada de forma predeterminada se a shell se invoca como sh .

--posix

Cambia o comportamento de bash onde a operación predeterminada difiere do estándar POSIX 1003.2 para coincidir co estándar ( modo posix ).

- Restrinxido

O shell convértese en restrinxido (vexa SHELL RESTRINGIDO a continuación).

--rpm-require

Produce a lista de ficheiros que se requiren para executar o script shell. Isto implica "-n" e está suxeito ás mesmas limitacións que o erro de compilación ao comprobar a comprobación; Non se analizan as comprobacións, [] as probas e as evals, polo que se poden perder algunhas dependencias. --verbose equivalente a -v .

--versión

Mostrar a información de versión para esta instancia de bash na saída estándar e saír con éxito.

ARGUMENTOS

Se os argumentos continúan despois do procesamento de opcións e non se fornece a opción -c nin a -s , o primeiro argumento suponse que é o nome dun ficheiro que contén ordes de shell. Se bash é invocado deste xeito, $ 0 defínese no nome do ficheiro e os parámetros posicionais están definidos nos argumentos restantes. Bash le e executa os comandos deste ficheiro, e logo sae. O estado de saída de Bash é o estado de saída do último comando executado no script. Se non se executan comandos, o estado de saída é 0. Acontece un intento por abrir o ficheiro no directorio actual e, se non se atopa ningún ficheiro, o shell busca os directorios en PATH para o script.

INVOCACIÓN

Un cartafol de inicio de sesión é aquel cuxo primeiro carácter de argumento cero é a - , ou un comezado coa opción --login .

Un intérprete interactivo é un iniciado sen argumentos non opcionais e sen a opción -c cuxa entrada e saída están conectados a terminais (determinada por isatty (3)), ou un iniciado coa opción -i . PS1 está configurado e $ - inclúe i si bash é interactivo, permitindo que un script de shell ou un ficheiro de inicio proba este estado.

Os seguintes parágrafos describen como bash executa os seus ficheiros de inicio. Se algún dos ficheiros existe pero non se pode ler, bash informa un erro. Os contidos se expanden nos nomes dos ficheiros como se describe a continuación na sección Expansión de Tilde na sección EXPANSIÓN .

Cando bash é invocado como un intérprete de inicio de sesión interactivo ou como intérprete non interactivo coa opción --login , primeiro le e executa os comandos do ficheiro / etc / profile , se ese ficheiro existe. Despois de ler ese arquivo, busca ~ / .bash_profile , ~ / .bash_login e ~ / .profile , nesa orde e le e executa comandos do primeiro que existe e é lexible. A opción --noprofile pode usarse cando o shell se inicia para inhibir este comportamento.

Cando sae unha conta de inicio de sesión, bash le e executa comandos do ficheiro ~ / .bash_logout , se existe.

Cando se inicia un shell interactivo que non é un shell de inicio de sesión, bash le e executa comandos de ~ / .bashrc , se ese ficheiro existe. Isto pode ser inhibido empregando a opción --norc . A opción --rcfile file forzará a bash a ler e executar comandos do ficheiro en lugar de ~ / .bashrc .

Cando bash iníciase de forma non interactiva, para executar un script shell, por exemplo, busca a variable BASH_ENV no ambiente, expande o seu valor se aparece alí e usa o valor expandido como o nome dun ficheiro para ler e executar . Bash compórtase coma se executásese o seguinte comando:

se [-n "$ BASH_ENV"]; entón. "$ BASH_ENV"; fi

pero o valor da variable PATH non se usa para buscar o nome do ficheiro.

Se invoca o bash co nome sh , intenta imitar o comportamento de inicio das versións históricas de sh o máis próximo posible, aínda que tamén se cumpre co estándar POSIX. Cando se invoca como intérprete de inicio de sesión interactiva ou cun intérprete de comandos non interactivo coa opción --login , primeiro intenta ler e executar comandos de / etc / profile e ~ / .profile , nesa orde. A opción --noprofile pode usarse para inhibir este comportamento. Cando se invoca como un intérprete interactivo co nome sh , bash busca a variable ENV , expande o seu valor se está definido e usa o valor expandido como o nome dun ficheiro para ler e executar. Xa que unha shell invocada como sh non intenta ler e executar comandos desde ningún outro ficheiro de inicio, a opción --rcfile non ten efecto. Un shell non interactivo invocado co nome sh non intenta ler ningún outro ficheiro de inicio. Cando se invoca como sh , bash entra no modo posix despois de ler os ficheiros de inicio.

Cando bash iníciase no modo posix , como na opción de liña de comandos --posix segue o estándar POSIX para os ficheiros de inicio. Neste modo, as cunchas interactivas expanden a variable ENV e os comandos son lidos e executados desde o ficheiro cuxo nome é o valor expandido. Non se len outros ficheiros de inicio.

Bash intenta determinar cando está a ser executado polo demonio da shell remota, xeralmente rshd . Se bash determina que está sendo executado por rshd , le e executa comandos de ~ / .bashrc , se ese ficheiro existe e é lexible. Non vai facelo se se invoca como sh . A opción --norc pode usarse para inhibir este comportamento e pódese usar a opción --rcfile para forzar outro ficheiro a ser lido, pero rshd xeralmente non invoca o shell con esas opcións ou permítelles especificar.

Se a shell se inicia co usuario efectivo (grupo) id non igual ao id de usuario real (grupo), ea opción -p non se fornece, non se leen ficheiros de inicio, as funcións shell non se herdan do ambiente, o SHELLOPTS A variable, se aparece no ambiente, ignórase e a ID de usuario efectiva está configurada na ID de usuario real. Se a opción -p é subministrada a invocación, o comportamento de inicio é o mesmo, pero o identificador de usuario efectivo non se restablece.

DEFINICIÓNS

As seguintes definicións úsanse ao longo do resto do documento.

en branco

Un espazo ou pestana.

palabra

Unha secuencia de caracteres considerada como unha única unidade polo shell. Tamén coñecido como token .

nome

Unha palabra que consiste únicamente en caracteres alfanuméricos e guións baixos, e que comeza cun carácter alfabético ou un guión baixo. Tamén coñecido como identificador .

metacarácter

Un personaxe que, cando non se menciona, separa as palabras. Un dos seguintes:

| &; () <> pestana do espazo

operador de control

Un token que realiza unha función de control. É un dos seguintes símbolos:

|| & &&; ;; () |

PALABRAS RESERVAS

As palabras reservadas son palabras que teñen un significado especial para o shell. As seguintes palabras son recoñecidas como reservadas cando non están seleccionadas e xa sexan a primeira palabra dun comando simple (ver SHELL GRAMMAR a continuación) ou a terceira palabra dun caso ou para o comando:

! O caso faino elif máis esac fi para a función se selecciona entón ata mentres {} hora [[]]

SHELL GRAMMAR

Comandos sinxelos

Un comando simple é unha secuencia de asignacións de variables opcionais seguidas de palabras e redireccións en branco e terminadas por un operador de control . A primeira palabra especifica o comando a executar e pasa como argumento cero. As palabras restantes pasan como argumentos ao comando invocado.

O valor de retorno dun comando simple é o seu estado de saída, ou 128 + n se o comando é rescindido polo sinal n .

Pipelines

Un gasoduto é unha secuencia dun ou máis comandos separados polo personaxe . O formato para un oleoduto é:

[ tempo [ -p ]] [! ] comando [ | comando2 ...]

A saída estándar do comando está conectada a través dunha canalización á entrada estándar do comando2 . Esta conexión realízase antes das redireccións especificadas polo comando (consulte REDIRECTION a continuación).

Se a palabra reservada ! precede a un oleoduto, o estado de saída desa canalización é o NO lóxico do estado de saída do último comando. Se non, o estado do gasoduto é o estado de saída do último comando. O shell espera que termine o comando de todos os comandos antes de devolver un valor.

Se o tempo reservado palabra precede a un oleoduto, o tempo transcorrido, así como o tempo de usuario e sistema consumido pola súa execución informáronse cando o gasoducto termina. A opción -p cambia o formato de saída ao especificado por POSIX. A variable TIMEFORMAT pode ser configurada nunha cadea de formato que especifica como se debe mostrar a información de tempo; vexa a descrición de TIMEFORMAT en Variables de Shell a continuación.

Cada comando nunha canalización execútase como un proceso separado (é dicir, nun subsolo).

Listas

A lista é unha secuencia dunha ou máis canalizacións separadas por un dos operadores ; , & , && , ou || , e opcionalmente rescindido por un dos ; , & ou .

Destes operadores de listas, && e || teñen igual precedencia, seguido por ; e &, que teñen igual precedencia.

Pode aparecer unha secuencia dunha ou máis liñas novas nunha lista no canto dun punto e coma para delimitar os comandos.

Se o operador de control finaliza un comando & , o shell executa o comando en segundo plano nun subshell. O shell non espera que remate o comando e o estado de retorno é 0. Comandos separados por un ; son executadas secuencialmente; o shell espera que cada comando termine á súa vez. O estado de retorno é o estado de saída do último comando executado.

Os operadores de control && e || denota listas e listas OR e respectivamente. Unha lista de AND ten o formulario

comando1 e & comando2

O comando 2 execútase se, e só se, command1 devolve un estado de saída de cero.

Unha lista OR ten o formulario

comando 1 || comando2

O comando 2 execútase se e só se o comando 1 retorna un estado de saída non cero. O estado de retorno das listas de AND e OR é o estado de saída do último comando executado na lista.

Comandos compostos

Un comando composto é un dos seguintes:

( lista )

A lista execútase nun subshell. As asignacións variables e os comandos integrados que afectan o ambiente do shell non permanecen en vigor despois de que o comando se complete. O estado de retorno é o estado de saída da lista .

{ lista ; }

A lista simplemente execútase no contorno actual do shell. A lista debe ser rescindida cunha nova liña ou punto e coma. Isto é coñecido como un comando de grupo . O estado de retorno é o estado de saída da lista . Teña en conta que a diferenza dos metacaracteres ( e ) , { e } son palabras reservadas e deben ocorrer cando se permite que se recoñeza unha palabra reservada. Xa que non causan unha ruptura de palabras, deben estar separados da lista por espazos en branco.

(( expresión ))

A avaliación avalúlase segundo as regras descritas debaixo da AVALIACIÓN ARITÉMICA . Se o valor da expresión non é cero, o estado de retorno é 0; do contrario, o estado de retorno é 1. Isto equivale exactamente a deixar " expresión ".

[[ expresión ]]

Devolve un estado de 0 ou 1 segundo a avaliación da expresión de expresión condicional. As expresións están compostas das primarias descritas debaixo baixo EXPRESIÓNS CONDICIÓNS . A división de palabras ea ampliación do nome do camiño non se realizan nas palabras entre [[ e ]] ; A expansión de tilde, o parámetro ea variable, a expansión aritmética, a substitución de comandos, a substitución de procesos ea eliminación de cotas realízanse.

Cando se usan os operadores == e ! = , A cadea á dereita do operador considérase un estándar e emparejado segundo as regras descritas debaixo de Pattern Matching . O valor de retorno é 0 se a corda coincide ou non coincide co patrón, respectivamente, e 1 se non. Calquera parte do patrón pode ser citada para forza-lo a ser combinado como unha cadea.

As expresións pódense combinar cos seguintes operadores, listados en orden decreciente de precedencia:

( expresión )

Devolve o valor da expresión . Isto pode usarse para anular a precedencia normal dos operadores.

! expresión

Verdadeira se a expresión é falsa.

expresión1 e & expresión2

É certo se tanto expression1 como expression2 son verdadeiras.

expresión1 || expression2 Verdadeiro se a expresión1 ou a expresión2 son verdadeiras.

O && e || os operadores non evalúan a expresión2 se o valor da expresión1 é suficiente para determinar o valor de retorno de toda a expresión condicional.

para o nome [ en palabra ]; facer lista ; feito

A lista de palabras seguintes está expandida, xerando unha lista de elementos. O nome da variable está axustado a cada elemento desta lista á súa vez, e a lista execútase cada vez. Se se omite a palabra en , o comando executa a lista unha vez para cada parámetro posicional que está configurado (consulte PARÁMETROS a continuación). O estado de retorno é o estado de saída do último comando que se executa. Se a expansión dos elementos que seguen nos resultados nunha lista baleira, non se executan comandos e o estado de retorno é 0.

para (( expr1 ; expr2 ; expr3 )); facer lista ; feito

En primeiro lugar, a expresión aritmética expr1 é avaliada de acordo coas regras descritas debaixo de AVALIACIÓN ARITÉMICA . A expresión aritmética expr2 é entón avaliada varias veces ata que avala a cero. Cada vez que expr2 avala un valor non cero, a lista é executada e avalíase a expresión aritmética expr3 . Se se omite algunha expresión, compórtase coma se avaliase a 1. O valor de retorno é o estado de saída do último comando na lista que se executa ou falso se algunha das expresións non é válida.

seleccionar nome [ en palabra ]; facer lista ; feito

A lista de palabras seguintes está expandida, xerando unha lista de elementos. O conxunto de palabras ampliadas imprímese no erro estándar, cada un precedido por un número. Se se omite a palabra en palabra , os parámetros de posición están impresos (consulte PARÁMETROS a continuación). O indicador de PS3 amósase entón e unha liña lerá desde a entrada estándar. Se a liña consta dun número correspondente a unha das palabras que se amosa, entón o valor do nome está axustado a esa palabra. Se a liña está baleira, as palabras e a solicitude amósanse de novo. Se se le a EOF, o comando complétase. Calquera outro valor leu fai que o nome sexa configurado en nulo. A liña de lectura gárdase na variable REPLY . A lista execútase despois de cada selección ata que se execute un comando break . O estado de saída de selección é o estado de saída do último comando executado na lista ou cero se non se executaron comandos.

palabra do caso en [[(] patrón [ | pattern ]

Unha orde de caso expande primeiro a palabra e intenta combinalo con cada patrón á vez, empregando as mesmas regras coincidentes que a expansión do nome de camiño (ver Expansión de nomes de ruta a continuación). Cando se atopa unha coincidencia, execútase a lista correspondente. Despois do primeiro encontro, non se intentan coincidencias posteriores. O estado da saída é cero se ningún patrón coincide. Se non, é o estado de saída do último comando executado na lista .

se a lista ; a continuación, lista; [ lista elif ; a continuación, lista ; ] ... [ outra lista ; ] fi

A lista se se executa a lista . Se o seu estado de saída é cero, a lista entón execútase. Se non, cada lista de elif execútase á súa vez, e se o seu estado de saída é cero, a lista correspondente entón execútase e execútase o comando. Se non, execútase a outra lista , se está presente. O estado da saída é o estado de saída do último comando executado, ou cero se ningunha condición é verdadeira.

mentres listo ; facer lista ; feito

ata a lista ; facer lista ; feito

O comando while executa de forma continua a lista de tarefas sempre que o último comando na lista devolve un estado de saída de cero. O comando ata que é idéntico ao comando while , excepto que a proba está negada; a lista de tarefas execútase sempre que o último comando na lista devolva un estado de saída non cero. O estado de saída do tempo e ata os comandos é o estado de saída do último comando da lista executado, ou cero se non se executa ningunha.

[ función ] nome () { lista ; }

Isto define unha función chamada nome . O corpo da función é a lista de comandos entre {e}. Esta lista execútase cando o nome se especifica como o nome dun comando simple. O estado de saída dunha función é o estado de saída do último comando executado no corpo. (Vexa FUNCTIONS a continuación.)

COMENTARIOS

Nun intérprete non interactivo ou nun intérprete interactivo en que está habilitada a opción de comentarios interactivos para a tenda construída (vexa SHELL BUILDING COMMANDS a continuación), unha palabra que comeza con # fai que se ignore a palabra e todos os caracteres restantes nesa liña. Un shell interactivo sen a opción interactiva de comentarios habilitado non permite comentarios. A opción interactive_comments está activada de xeito predeterminado nos cascos interactivos.

QUOTA

A cotización úsase para eliminar o significado especial de determinados caracteres ou palabras no shell. A cotización pode usarse para desactivar o tratamento especial para caracteres especiais, para evitar que as palabras reservadas sexan recoñecidas como tales e para evitar a expansión dos parámetros.

Cada un dos metacaracteres enumerados anteriormente en DEFINICIÓNS ten un significado especial para o shell e debe ser citado se se representa.

Cando se usan as instalacións de expansión do historial de comandos, o carácter de expansión da historia , xeralmente ! , debe ser citado para evitar a expansión do historial.

Existen tres mecanismos de citas: o personaxe de escape , comiñas simples e comiñas dobres.

Unha barra invertida non citada ( \ ) é o carácter de escape . Conserva o valor literal do seguinte carácter que se segue, con excepción de . Se aparece un par de \ e a barra invertida non está citada, o \ será tratado como unha continuación de liña (é dicir, eliminado da transmisión de entrada e ignorado de forma efectiva).

Os caracteres encerrados en comiñas simples preservan o valor literal de cada carácter dentro das comiñas. É posible que non se produza unha única cita entre as comiñas simples, nin sequera a precedida por unha barra invertida.

Os caracteres encerrados en comiñas dobres preservan o valor literal de todos os caracteres dentro das comiñas, coa excepción de $ , ` , e \ . Os caracteres $ e ` conservan o seu significado especial dentro das comiñas dobres. A barra invertida conserva o seu significado especial só cando se segue un dos seguintes caracteres: $ , ` , ' , \ , ou . Unha cotización dobre pode cotizarse dentro de comiñas dobres precedéndose cunha barra invertida.

Os parámetros especiais * e @ teñen un significado especial cando se realizan comiñas dobres (consulte PARÁMETROS a continuación).

As palabras da forma $ ' string ' son tratadas especialmente. A palabra se expande a cadea , con caracteres que escaparon de barra invertida substituídos segundo o estándar ANSI C. As secuencias de escape de barra invertida, se están presentes, descodificáronse do seguinte xeito:

\ a

alerta (campá)

\ b

retroceso

\ e

un personaxe de escape

\ f

alimentación de formulario

\ n

nova liña

\ r

retorno de carro

\ t

pestana horizontal

\ v

pestaña vertical

\\

barra invertida

\ '

cita única

\ nnn

o carácter de oito bits cuxo valor é o valor octal nnn (un a tres díxitos)

\ x HH

o carácter de oito bits cuxo valor é o valor hexadecimal HH (un ou dous díxitos hexadecimales)

\ cx

un carácter de control- x

O resultado expandido é unicamente citado, coma se o sinal de dólar non estivese presente.

Unha cadea de dúas cores precedida por un sinal de dólar ( $ ) fará que a cadea se traduza de acordo coa configuración actual. Se a localización actual é C ou POSIX , ignórase o sinal de dólar. Se a cadea é traducida e substituída, o reemplazo é dobremente citado.

PARÁMETROS

Un parámetro é unha entidade que almacena valores. Pode ser un nome , un número ou un dos caracteres especiais enumerados a continuación en Parámetros Especiais . Para os fins do shell, unha variable é un parámetro denotado por un nome . Unha variable ten un valor e cero ou máis atributos . Os atributos asignáronse usando o comando declare builtin (ver declare a continuación en SHELL BUILDING COMMANDS ).

Engádese un parámetro se se lle asignou un valor. A cadea nula é un valor válido. Unha vez que se configure unha variable, só se pode desactivar mediante o comando built set (consulte SHELL BUILTIN COMMANDS a continuación).

Pódese asignar unha variable mediante unha declaración do formulario

nome = [ valor ]

Se o valor non se dá, a variable asignarase a cadea nula. Todos os valores experimentan expansión de tilo, parámetro e expansión variable, substitución de comandos, expansión aritmética e eliminación de presupostos (ver EXPANSIÓN a continuación). Se a variable ten o seu atributo enteiro definido, entón o valor está suxeito á expansión aritmética mesmo se a expansión $ ((...)) non se usa (consulte Expansión aritmética a continuación). A división de palabras non se realiza, con excepción de "$ @" como se explica debaixo nos parámetros especiais . Non se realiza a ampliación de nome de ruta. As declaracións de atribución tamén poden aparecer como argumentos para os comandos declare , typeset , export , readonly e local builtin.

Parámetros posicionais

Un parámetro posicional é un parámetro denotado por un ou máis díxitos, que non sexa o único díxito 0. Os parámetros posicionais son asignados a partir dos argumentos do shell cando é invocado e pode ser reasignado empregando o comando set builtin. Non se poden asignar parámetros posicionais con declaracións de asignación. Os parámetros de posición son substituídos temporalmente cando se executa unha función de shell (vexa FUNCTIONS a continuación).

Cando se amplíe un parámetro de posición que consta de máis dun só díxito, debe estar entre instrucións (ver EXPANSIÓN a continuación).

Parámetros especiais

O cascarón trata varios parámetros especialmente. Estes parámetros só poden ser referenciados; A asignación a eles non está permitida.

*

Expande aos parámetros de posición, a partir dunha. Cando a expansión ocorre dentro de comiñas dobres, se expande a unha única palabra co valor de cada parámetro separado polo primeiro carácter da variable especial IFS . É dicir, " $ * " equivale a " $ 1 c $ 2 c ... ", onde c é o primeiro carácter do valor da variable IFS . Se IFS non está establecido, os parámetros están separados por espazos. Se IFS é nulo, os parámetros únense sen separadores.

@

Expande aos parámetros de posición, a partir dunha. Cando a expansión ocorre dentro de comiñas dobres, cada parámetro se expande a unha palabra separada. É dicir, " $ @ " equivale a " $ 1 " " $ 2 " ... Cando non hai parámetros de posición, " $ @ " e $ @ expandir a nada (é dicir, elimináronse).

#

Expande ao número de parámetros de posición en decimal.

¿?

Expande ao estado da última canle de primeiro plano executado.

-

Expandirase á bandeiras de opción actual como se especifique a invocación, polo comando set builtin ou as definidas polo propio shell (como a opción -i ).

$

Expande ao ID do proceso do shell. Nun subshell (), se expande ao ID do proceso do shell actual, e non ao subshell.

!

Expande ao ID do proceso do comando fondo (asíncrono) máis recentemente executado.

0

Expande ao nome do shell ou o shell script. Esta opción está configurada na inicialización do shell. Se se invoca bash cun ficheiro de comandos, $ 0 configúrase no nome dese ficheiro. Se bash comeza coa opción -c , entón $ 0 está definido no primeiro argumento despois da cadea a executar, se está presente. Se non, configúrase no nome do ficheiro usado para invocar o bash , dado polo argumento cero.

_

No inicio do shell, estableza o nome do ficheiro absoluto da shell ou shell que se executa como se pasa na lista de argumentos. Posteriormente, expande ao último argumento ao comando anterior, despois da expansión. Tamén se establece o nome de ficheiro completo de cada comando executado e colocado no ambiente exportado a ese comando. Ao comprobar o correo, este parámetro mantén o nome do ficheiro de correo que está a ser verificado.

Variables de concha

As seguintes variables son definidas polo shell:

BASH

Expande ao nome de ficheiro completo usado para invocar esta instancia de bash .

BASH_VERSINFO

Unha variable de matriz lexítima cuxos membros teñen información de versión para esta instancia de bash . Os valores asignados aos membros da matriz son os seguintes:

BASH_VERSINFO [ 0]

O número de versión principal (o lanzamento ).

BASH_VERSINFO [ 1]

O número de versión menor (a versión ).

BASH_VERSINFO [ 2]

O nivel de parche.

BASH_VERSINFO [ 3]

A versión de compilación.

BASH_VERSINFO [ 4]

Estado de lanzamento (por exemplo, beta1 ).

BASH_VERSINFO [ 5]

O valor de MACHTYPE .

BASH_VERSION

Expande a unha cadea que describe a versión desta instancia de bash .

COMP_CWORD

COMP_LINE

A liña de comandos actual. Esta variable só está dispoñible nas funcións de shell e nos comandos externos invocados polas instalacións programables (vexa a finalización programable a continuación).

COMP_POINT

COMP_WORDS

Unha variábel de matriz (ver Arrays debaixo) que consiste nas palabras individuais da liña de comandos actual. Esta variable só está dispoñible nas funcións de shell invocadas polas instalacións programables (vexa Completion programable a continuación).

DIRSTACK

Unha variábel de matriz (ver Arrays debaixo) que contén os contidos actuais da pila de directorios. Os directorios aparecen na pila segundo se mostran cos dirs builtin. Asignar aos membros desta variábel de matriz pode usarse para modificar os cartafoles xa existentes na pila, pero debe empregarse as teclas pushd e popd para engadir e eliminar directorios. A asignación a esta variable non cambiará o directorio actual. Se DIRSTACK non está seleccionado , perde as súas propiedades especiais, aínda que se restableza posteriormente.

EUID

Expandirase ao ID de usuario efectivo do usuario actual, inicializado no inicio do shell. Esta variable é readonly.

FUNCNAME

O nome de calquera función de shell que executa actualmente. Esta variable só existe cando se executa unha función de shell. As atribucións a FUNCNAME non teñen ningún efecto e devolven un estado de erro. Se FUNCNAME está desactivado, perde as súas propiedades especiais, aínda que se restableza posteriormente.

GRUPOS

Unha variábel de matriz que contén a lista de grupos dos que o usuario actual é membro. As atribucións a GRUPOS non teñen ningún efecto e devolven un estado de erro. Se GROUPS non está seleccionado, perde as súas propiedades especiais, aínda que se restableza posteriormente.

HISTCMD

Número histórico ou índice da lista de historial do comando actual. Se HISTCMD non se detecta , perde as súas propiedades especiais, aínda que posteriormente se restableza.

Apelido

Establece automaticamente o nome do servidor actual.

HOSTTYPE

Configurar automaticamente nunha cadea que describe de forma exclusiva o tipo de máquina en que bash está a executarse. O valor predeterminado depende do sistema.

Liño

Cada vez que se fai referencia a este parámetro, o shell substitúe un número decimal que representa o número de liña secuencial actual (comezando con 1) dentro dun script ou función. Cando non se atopa nun script ou función, o valor substituído non está garantido para ser significativo. Se LINENO non está seleccionado , perde as súas propiedades especiais, aínda que se restableza posteriormente.

MACHTYPE

Configurar automaticamente nunha cadea que describe completamente o tipo de sistema en que bash está a executarse, no formato estándar do sistema de CPU de GNU. O valor predeterminado depende do sistema.

OLDPWD

O directorio de traballo anterior definido polo comando cd .

OPTARG

O valor do argumento da última opción procesado polo comando getopts builtin (vexa SHELL BUILDING COMMANDS a continuación).

OPTIND

O índice do seguinte argumento que será procesado polo comando getopts builtin (vexa SHELL BUILDING COMMANDS a continuación).

OSTYPE

Configurar automaticamente nunha cadea que describe o sistema operativo no que se executa bash . O valor predeterminado depende do sistema.

PIPESTATUS

Unha variábel de matriz (ver Arrays debaixo) que contén unha lista de valores de estado de saída dos procesos da última canle de primeiro plano executado recentemente (que pode conter só un único comando).

PPID

A ID do proceso dos pais do shell. Esta variable é readonly.

PWD

O directorio de traballo actual definido polo comando cd .

RANDOM

Cada vez que se fai referencia a este parámetro, xérase un número enteiro aleatorio entre 0 e 32767. A secuencia de números aleatorios pode ser inicializada asignando un valor a RANDOM . Se RANDOM non se detecta, perde as súas propiedades especiais, aínda que se restableza posteriormente.

RESPOSTA

Estableza a liña de entrada lida polo comando read builtin cando non se fornezan ningún argumento.

SEGUNDOS

Cada vez que se fai referencia a este parámetro, devólvese o número de segundos desde a invocación do shell. Se se asigna un valor a SECONDS , o valor devolto nas referencias posteriores é o número de segundos desde a asignación máis o valor asignado. Se SECONDS non se detecta, perde as súas propiedades especiais, aínda que posteriormente se restableza.

SHELLOPTS

Unha lista separada de puntos das opcións de shell habilitadas. Cada palabra na lista é un argumento válido para a opción -o do comando set builtin (vexa SHELL BUILTIN COMMANDS a continuación). As opcións que aparecen en SHELLOPTS son as indicadas segundo o set -o . Se esta variable está no ambiente cando se inicia o bash , cada opción shell na lista será habilitada antes de ler os ficheiros de inicio. Esta variable é de só lectura.

SHLVL

Incremento por un cada vez que se inicia unha instancia de bash .

UID

Expandirase ao ID de usuario do usuario actual, inicializado no inicio do shell. Esta variable é readonly.

As seguintes variables son utilizadas polo shell. Nalgúns casos, bash asigna un valor predeterminado a unha variable; Estes casos aparecen a continuación.

BASH_ENV

Se este parámetro está definido cando bash está a executar un script de shell, o seu valor interpreta como un nome de ficheiro que contén comandos para inicializar o shell, como en ~ / .bashrc . O valor de BASH_ENV está suxeito a expansión de parámetros, substitución de comando e expansión aritmética antes de ser interpretado como un nome de ficheiro. A ruta non se usa para buscar o nome do ficheiro resultante.

CDPATH

A ruta de busca do comando cd . Esta é unha lista de directorios separados por dous puntos nos que o shell busca os directorios de destino especificados polo comando cd . Un valor de mostra é ".: ~: / Usr".

COLUMNS

Usado polo comando select builtin para determinar o ancho do terminal cando imprime as listas de selección. Configurar automaticamente despois do recibimento dun SIGWINCH.

COMPREPLY

Unha variable de matriz da que bash le as posibles terminacións xeradas por unha función de shell invocada pola instalación de finalización programable (vexa a finalización programable a continuación).

FCEDIT

O editor por defecto para o comando builtin fc .

FIGNORE

Unha lista de sufixos separados por dous puntos para ignorar ao completar o nome do ficheiro (ver READLINE a continuación). Un nome de ficheiro cuxo sufijo coincide cunha das entradas de FIGNORE está excluída da lista de nomes de ficheiros coincidentes. Un valor de mostra é ". O: ~".

GLOBIGNORE

Unha lista de patróns separados por dous puntos que definen o conxunto de nomes de arquivos a ignorar pola expansión do nome de ruta. Se un nome de ficheiro combinado cun patrón de expansión da ruta de ruta coincide tamén cun dos patróns de GLOBIGNORE , elimínase da lista de coincidencias.

HISTCONTROL

Se se establece nun valor de ignorespace , as liñas que comezan cun carácter de espazo non se ingresan na lista de historial. Se se establece un valor de ignoredups , non se ingresan liñas coincidentes coa última liña de historial. Un valor de ignorante combina as dúas opcións. Se non se establece, ou se está establecido en calquera outro valor que o anterior, todas as liñas que lerán o analizador gardaranse na lista de historial, suxeita ao valor de HISTIGNORE . A función desta variable é reemplazada por HISTIGNORE . Non se proban as liñas segundo e posteriores dun comando composto multi-liña e engádense á historia sen importar o valor de HISTCONTROL .

HISTFIL

O nome do ficheiro no que se garda o historial de comandos (vexa HISTORIA a continuación). O valor predeterminado é ~ / .bash_history . Se non está seleccionado, o historial de comandos non se gardará cando unha shell interactiva saia.

HISTFILESIZE

O número máximo de liñas contidas no ficheiro da historia. Cando se asigna un valor a esta variable, o ficheiro de historial truncouse, se fose necesario, para non contar máis que ese número de liñas. O valor predeterminado é 500. O ficheiro de historial tamén se trunca neste tamaño despois de escribilo cando unha shell interactiva sae.

HISTIGNORE

Unha lista de patróns separada por dous puntos utilizada para decidir que liñas de comando deben gardarse na lista de historial. Cada patrón está ancorado ao comezo da liña e debe coincidir coa liña completa (non se engade ` * 'implícito). Cada patrón probaase contra a liña despois de aplicar os controis especificados por HISTCONTROL . Ademais dos caracteres normais do patrón de concha, ` & 'coincide coa liña do historial anterior. ` & 'pode escapar usando unha barra invertida; a barra invertida é eliminada antes de intentar unha coincidencia. Non se proban as liñas segundo e posteriores dun comando composto multi-liña e engádense á historia independentemente do valor de HISTIGNORE .

HISTSIZE

O número de comandos a lembrar no historial de comandos (vexa a HISTORIA a continuación). O valor predeterminado é 500.

CASA

O directorio persoal do usuario actual; o argumento predeterminado para o comando builtin cd . O valor desta variable tamén se usa cando se realiza a expansión da tila.

HOSTFILE

Contén o nome dun ficheiro no mesmo formato que / etc / host que debería ser lido cando o shell ten que completar un nome de máquina. A lista de posibles completións de nomes de host pode cambiarse mentres se executa o shell; a próxima vez que se intente completar a extensión do servidor despois de que o valor sexa modificado, bash engade o contido do novo ficheiro á lista existente. Se HOSTFILE está configurado, pero non ten ningún valor, bash intenta ler / etc / hosts para obter a lista das completas de hostname posibles. Cando HOSTFILE está desactivado, a lista de nomes de host está borrada.

IFS

O separador de campo interno que se usa para dividir a palabra despois da expansión e dividir as liñas en palabras co comando read construído. O valor predeterminado é `` ''.

IGNOREEOF

Controla a acción dun shell interactivo ao recibir un carácter EOF como a única entrada. Se se establece, o valor é o número de caracteres EOF consecutivos que deben escribirse como os primeiros caracteres nunha liña de entrada antes de que salga o Bash . Se a variable existe pero non ten un valor numérico, ou non ten ningún valor, o valor por defecto é 10. Se non existe, EOF significa o final da entrada no shell.

INPUTRC

O nome de ficheiro do ficheiro de inicio de readline , anulando o valor predeterminado de ~ / .inputrc (consulte READLINE a continuación).

LANG

Usado para determinar a categoría de localización para calquera categoría non seleccionada especificamente cunha variable que comeza con LC_ .

LC_ALL

Esta variable anula o valor de LANG e calquera outra variable LC_ que especifique unha categoría de localización.

LC_COLLATE

Esta variable determina a orde de compilación empregada ao clasificar os resultados da ampliación da ruta de camiño e determina o comportamento das expresións de rango, as clases de equivalencia e as secuencias de compilación dentro da amplitude do nome de ruta e a coincidencia de patróns.

LC_CTYPE

Esta variable determina a interpretación de caracteres e o comportamento das clases de caracteres dentro da amplitude do nome de ruta e a correspondencia entre patróns.

LC_MESSAGES

Esta variable determina a configuración local usada para traducir cadeas cadradas dúas veces precedidas por un $ .

LC_NUMERIC

Esta variable determina a categoría de localización empregada para o formatado numérico.

LIÑAS

Usado polo comando select builtin para determinar a lonxitude da columna para imprimir as listas de selección. Configurar automaticamente despois do recibimento dun SIGWINCH.

MAIL

Se este parámetro está configurado nun nome de ficheiro e non se configura a variable MAILPATH , bash informa ao usuario da chegada do correo no ficheiro especificado.

MAILCHECK

Especifica con que frecuencia (en segundos) bash comproba o correo. O valor predeterminado é de 60 segundos. Cando é hora de buscar o correo, o shell faino antes de mostrar a solicitude principal. Se esta variable non está establecida, ou estableza un valor que non sexa un número maior ou igual a cero, o shell deshabilitará a verificación de correo.

MAILPATH

Unha lista de nomes de ficheiros separados por dous para verificar o correo. A mensaxe a imprimir cando chega o correo nun ficheiro en particular pode ser especificada separando o nome do ficheiro da mensaxe cun `? '. Cando se usa no texto da mensaxe, $ _ expande ao nome do ficheiro de correo actual. Exemplo:

MAILPATH = '/ var / mail / bfox? "Ten correo": ~ / shell-mail? "$ _ Ten correo!"'

Bash fornece un valor predeterminado para esta variable, pero a localización dos ficheiros de correo de usuario que usa depende do sistema (por exemplo, / var / mail / $ USER ).

OPTERR

Se se establece no valor 1, bash amosa mensaxes de erro xeradas polo comando built-in getopts (consulte SHELL BUILTIN COMMANDS a continuación). OPTERR inicialízase a 1 cada vez que se invoca o shell ou execútase unha shell script.

Camiño

O camiño de busca dos comandos. É unha lista de directorios separados por dous puntos onde o shell busca ordes (consulte COMANDO EXECUCIÓN a continuación). A ruta predeterminada depende do sistema e é definida polo administrador que instala o bash . Un valor común é `` / usr / gnu / bin: / usr / local / bin: / usr / ucb: / bin: / usr / bin :. ''.

POSIXLY_CORRECT

Se esta variable está no ambiente cando se inicia o bash , o shell entra no modo posix antes de ler os ficheiros de inicio, coma se a opción de invocación --posix fora subministrada. Se está definido mentres o shell está en execución, bash habilita o modo posix , como se se executa o comando set -o posix .

PROMPT_COMMAND

Se está definido, o valor execútase como un comando antes de emitir cada solicitude primaria.

PS1

O valor deste parámetro é ampliado (vexa PROMPTING embaixo) e úsase como cadea de solicitude primaria. O valor predeterminado é `` \ s- \ v \ $ ''.

PS2

O valor deste parámetro amplíase como con PS1 e úsase como a cadea de avisos secundaria. O valor predeterminado é `` > ''.

PS3

O valor deste parámetro úsase como indicador para o comando de selección (vexa SHELL GRAMMAR arriba).

PS4

O valor deste parámetro é expandido como con PS1 eo valor imprímese antes de que cada comando bash se amose durante un seguimento de execución. O primeiro personaxe de PS4 repítese varias veces, se é necesario, para indicar múltiples niveis de indirección. O valor predeterminado é `` + ''.

TIMEFORMAT

O valor deste parámetro emprégase como unha cadea de formato que indica como se mostrará a información de cronometraxe para oleodutos prefixados coa palabra reservada. O % character introduce unha secuencia de escape que se expande a un valor de tempo ou a outra información. As secuencias de escape e os seus significados son as seguintes; as frechas denotan porcións opcionais.

%%

Un % literal.

% [ p ] [l] R

O tempo transcorrido en segundos.

% [ p ] [l] U

Número de segundos de CPU pasados ​​no modo de usuario.

% [ p ] [l] S

Número de segundos de CPU pasados ​​no modo de sistema.

% P

A porcentaxe de CPU, calculada como (% U +% S) /% R.

O p opcional é un díxito que especifica a precisión , o número de díxitos fraccionarios despois dun punto decimal. Un valor de 0 non fai que se saia un punto decimal ou fracción. Na maioría dos tres lugares despois do punto decimal pódese especificar; Os valores de p maior que 3 mudan a 3. Se non se especifica p , emprégase o valor 3.

O opcional l especifica un formato máis longo, incluíndo minutos, do formulario MM m SS . FF s. O valor de p determina se a fracción está incluída ou non.

Se esta variable non está configurada, bash actúa coma se tivese o valor $ '\ nreal \ t% 3lR \ nuser \ t% 3lU \ nsys% 3lS' . Se o valor é nulo, non se mostrará información de tempo. Engádese unha nova liña final cando se amosa a cadea de formato.

TMOUT

Se se establece nun valor maior que cero, o TMOUT é tratado como o tempo de espera predeterminado para o construído. O comando de selección finaliza se a entrada non chega despois dos segundos de TMOUT cando a entrada procede dun terminal. Nun intérprete interactivo, o valor interprétase como o número de segundos para esperar a entrada despois de emitir a solicitude primaria. Bash termina despois de agardar por ese número de segundos se a entrada non chega.

auto_resume

Esta variable controla a forma en que o shell interactúa co usuario e co control do traballo. Se esta variable está configurada, os comandos sinxelos dunha soa palabra sen redireccións son tratados como candidatos para a continuación dun traballo detido existente. Non se permite ambigüedad; Se hai máis dun traballo que comeza coa cadea mecanografada, seleccionouse o traballo máis recente. O nome dun traballo parado, neste contexto, é a liña de comandos utilizada para iniciala. Se se axusta ao valor exacto , a cadea proporcionada debe coincidir exactamente co nome dun traballo parado; se se define como subcadena , a cadea subministrada debe coincidir cunha subcadea do nome dun traballo parado. O valor da subcadena fornece unha funcionalidade análoga á %? identificador de traballo (consulte CONTROL DE TRABAJO a continuación). Se se establece en calquera outro valor, a cadea subministrada debe ser un prefixo dun nome de traballo detido; isto fornece unha funcionalidade análoga ao identificador % job.

Histchars

Os dous ou tres personaxes que controlan a expansión da historia e a tokenización (vexa HISTORIA EXPANSIÓN a continuación). O primeiro carácter é o carácter de expansión da historia , o carácter que sinala o inicio dunha expansión do historial, normalmente ' ! '. O segundo carácter é o carácter de substitución rápida , que se usa como abreviatura para volver executar o comando anterior introducido, substituíndo unha cadea para outra no comando. O valor predeterminado é ` ^ '. O carácter terceiro opcional é o carácter que indica que o resto da liña é un comentario cando se atopa como o primeiro carácter dunha palabra, normalmente ` # '. O carácter de comentario de historial fai que se omita a substitución do historial por palabras restantes na liña. Non fai necesariamente que o analizador de cores trate o resto da liña como un comentario.

Arrays

Bash fornece variables de matriz unidimensional. Calquera variable pode utilizarse como matriz; a declaración integrada declarará explícitamente unha matriz. Non hai límite máximo sobre o tamaño dunha matriz, nin ningunha esixencia de que os membros sexan indexados ou asignados contigua. As matrices están indexadas empregando enteiros e son baseados en cero.

Unha matriz créase automaticamente se hai algunha variable asignada usando o nome de sintaxe [ subíndice ] = valor . O subíndice é tratado como unha expresión aritmética que debe avaliar a un número maior ou igual a cero. Para declarar explícitamente unha matriz, use declarar -un nome (consulte SHELL BUILTIN COMMANDS a continuación). declarar: un nome [ subíndice ] tamén é aceptado; o subíndice ignórase. Os atributos poden ser especificados para unha variable de matriz empregando declaracións e construcións de lectura . Cada atributo aplícase a todos os membros dunha matriz.

As matrices están asignadas a usar as tarefas compostas do nome do formulario = ( valor 1 ... valor n ) , onde cada valor é da forma [ subíndice ] = cadea . Só se require unha secuencia . Se se fornezan os corchetes opcionais e o subíndice, asignarase a ese índice; de outro xeito o índice do elemento asignado é o último índice asignado pola declaración máis un. A indexación comeza en cero. Esta sintaxis tamén é aceptada pola declaración incorporada. Os elementos de matriz individual poden ser asignados a usar a sintaxe de nome [ subíndice ] = valor introducida anteriormente.

O builtin sen configurar úsase para destruír arrays. O nome non establecido [ subíndice ] destrúe o elemento matriz no subíndice de índice. nome descoñecido , onde o nome é unha matriz ou nome desactivado [ subíndice ], onde o subíndice é * ou @ , elimina toda a matriz.

Os declaracións , locais e readonly construídos cada un aceptan unha opción-a para especificar unha matriz. O builtin lido acepta unha opción-a para asignar unha lista de palabras leídas desde a entrada estándar a unha matriz. O conxunto e declara builtins mostra os valores de matriz de forma que lles permita ser reutilizados como asignacións.

EXPANSIÓN

A expansión realízase na liña de comando despois de dividirse en palabras. Existen sete tipos de expansión: expansión de engrenaxe, expansión de tilde , parámetro e expansión variable , substitución de comando , expansión aritmética , división de palabras e expansión de camiño .

O pedido de expansións é: expansión de engrenaxe, expansión de tila, parámetro, expansión variable e aritmética e substitución de comando (feita de forma esquerda a dereita), a división de palabras ea expansión do nome de ruta.

Nos sistemas que poden soportalo, existe unha expansión adicional dispoñible: substitución de procesos .

Expansión de adherencia

A expansión de soporte é un mecanismo polo que se poden xerar cadeas arbitrarias. Este mecanismo é similar á expansión do nome de ruta , pero os nomes dos ficheiros xerados non necesitan existir. Os patróns para ser expandidos inclúen a forma dun preámbulo opcional, seguido dunha serie de secuencias separadas por comas entre un par de aparellos, seguido dun postScript opcional. O preámbulo está prefixado para cada cadea que se atopa dentro das teclas, e logo engádese o caderno de entrada a cada cadea resultante, expandiéndose de esquerda a dereita.

As expansións de axuste poden estar aniñadas. Os resultados de cada cadea expandida non están ordenados; A esquerda á dereita consérvase a orde. Por exemplo, un { d, c, b } e se expande en `ade ace abe '.

A expansión de Brace realízase antes de que se realicen outras expansións, e se conservan todos os caracteres especiais para outras expansións no resultado. É estrictamente textual. Bash non aplica ningunha interpretación sintáctica ao contexto da expansión ou o texto entre os aparellos.

Esta construción úsase normalmente como taquigrafia cando o prefixo común das cadeas a xerar é máis longo que no exemplo anterior:

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

ou

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

A expansión de Brace introduce unha lixeira incompatibilidade coas versións históricas do sh . sh non trata os chaves de apertura ou de pechadura especialmente cando aparecen como parte dunha palabra e os preserva na saída. Bash elimina os aparellos das palabras como consecuencia da expansión de engate. Por exemplo, unha palabra ingresada a sh como ficheiro {1,2} aparece de forma idéntica na saída. A mesma palabra prodúcese como file1 file2 despois da expansión por bash . Se se desexa unha compatibilidade rigorosa con sh , inicie a opción B + ou desactive a expansión do brace coa opción B + ao comando set (consulte SHELL BUILDING COMMANDS a continuación).

Expansión de Tilde

Se unha palabra comeza cun carácter de tilde non especificado (` ~ '), todos os caracteres que preceden á primeira barra non cotizada (ou todos os caracteres, se non hai unha barra inclinada) son considerados un prefixo de tilde . Se ningún dos personaxes do prefixo de tilde son citados, os caracteres do prefijo de tilde seguidos da tilde son tratados como un posible nome de inicio de sesión . Se este nome de inicio de sesión é a cadea nula, o tilde substitúese co valor do parámetro shell INICIO . Se a páxina de inicio non está establecida, substituirase o directorio persoal do usuario que executa o shell. En caso contrario, o prefixo de tilde substitúese co directorio persoal asociado co nome de inicio especificado.

Se o prefijo de tilde é un `~ + ', o valor da variábel de contorno PWD substitúe ao prefixo de tilde. Se o prefixo de tilde é un `~ - ', o substituto da variable de contorno OLDPWD , se está configurado. Se os caracteres que seguen o tilde no prefixo de tilde consisten nun número N , opcionalmente prefixado por un `+ 'ou un` -', o prefixo de tilde substitúese co elemento correspondente da pila de directorios, como se mostraría polos dirs builtin invocados co prefijo de tilde como argumento. Se os caracteres que seguen o tilde no prefixo de tilde consisten nun número sen un `+ 'ou` -' líder, suponse '+'.

Se o nome de inicio de sesión non é válido ou a falla de expansión de tilde, a palabra non se modifica.

Cada asignación de variable está marcada para os prefixos de tilde non cotizados inmediatamente seguintes a : ou = . Nestes casos, tamén se realiza a expansión de tilde. En consecuencia, pódese empregar nomes de ficheiro con tildes nas atribucións a PATH , MAILPATH e CDPATH , eo shell asigna o valor expandido.

Expansión de parámetros

O carácter ` $ 'introduce unha ampliación de parámetros, substitución de comandos ou expansión aritmética. O nome ou símbolo do parámetro a expandir pode estar encerrado en chaves, que son opcionais, pero serven para protexer a variable que se vai expandir de caracteres seguindo o que podería interpretarse como parte do nome.

Cando se usan chaves, a chave de finalización coincidente é o primeiro ` } 'non escapado por unha barra invertida ou dentro dunha cadea cotizada e non dentro dunha expansión aritmética incorporada, substitución de comandos ou expansión paramter.

Engádese o valor do parámetro . Os soportes son necesarios cando o parámetro é un parámetro de posición con máis dun díxito ou cando o parámetro é seguido por un carácter que non debe ser interpretado como parte do seu nome.

En cada un dos casos a continuación, a palabra está suxeita á expansión da tila, a expansión dos parámetros, a substitución do comando e a expansión aritmética. Cando non se realiza a expansión de subcadenas, probas de bash para un parámetro que non está establecido ou nulo; omitindo os resultados do colonos nunha proba só para un parámetro que non se establece.

Usar valores predeterminados . Se o parámetro é desactivado ou nulo, a ampliación da palabra está substituída. Se non, substitúese o valor do parámetro .

Asignar valores predeterminados . Se o parámetro é desactivado ou nulo, a expansión da palabra asignarase ao parámetro . O valor do parámetro é entón substituído. Os parámetros posicionais e os parámetros especiais non se poden asignar deste xeito.

Erro de visualización se é Null ou Unset . Se o parámetro é nulo ou non establecido, a expansión da palabra (ou unha mensaxe para ese efecto se a palabra non está presente) escríbese ao erro estándar e a shell, se non é interactiva, sae. Se non, substitúese o valor do parámetro .

Usar valor alternativo . Se o parámetro é nulo ou non está establecido, non se substitúe nada, se non, a substitución da palabra está substituída.

Expande aos nomes de variables cuxos nomes comezan con prefixo , separados polo primeiro carácter da variable especial IFS .

Engádese a lonxitude en caracteres do valor do parámetro . Se o parámetro é * ou @ , o valor substituído é o número de parámetros de posición. Se o parámetro é un nome de matriz subscrito por * ou @ , o valor substituído é o número de elementos da matriz.

A palabra é expandida para producir un patrón como na expansión do nome da ruta. Se o patrón coincide co comezo do valor do parámetro , o resultado da expansión é o valor expandido do parámetro co patrón de coincidencia máis curto (o caso `` # '') ou o patrón de correspondencia máis longo (o `` ## ' "caso") eliminado. Se o parámetro é @ ou * , a operación de eliminación de patrón aplícase a cada parámetro posicional á súa vez, ea expansión é a lista resultante. Se o parámetro é unha matriz subscrita con @ ou * , a operación de eliminación de patrón aplícase a cada membro da matriz á súa vez, ea expansión é a lista resultante.

A palabra é expandida para producir un patrón como na expansión do nome da ruta. Se o patrón coincide cunha porción final do valor expandido do parámetro , o resultado da expansión é o valor expandido do parámetro co patrón de coincidencia máis curto (o caso `` % '' ou o patrón de correspondencia máis longo (o `` % % '' caso) eliminado. Se o parámetro é @ ou * , a operación de eliminación de patrón aplícase a cada parámetro posicional á súa vez, ea expansión é a lista resultante. Se o parámetro é unha matriz subscrita con @ ou * , a operación de eliminación de patrón aplícase a cada membro da matriz á súa vez, ea expansión é a lista resultante.

O patrón é expandido para producir un patrón como na expansión do nome da ruta. O parámetro é expandido e a maior coincidencia de patrón contra o seu valor substitúese por cadea . Na primeira forma, só se substitúe o primeiro xogo. O segundo formulario fai que todas as coincidencias de patrón sexan substituídas por string . Se o patrón comeza con # , debe coincidir ao comezo do valor expandido do parámetro . Se o patrón comeza con % , debe coincidir ao final do valor expandido do parámetro . Se a cadea é nula, elimínanse as coincidencias do patrón e pódese omitir o patrón / seguinte. Se o parámetro é @ ou * , a operación de substitución aplícase a cada parámetro de posición á súa vez, ea expansión é a lista resultante. Se o parámetro é unha variable de matriz subscrita con @ ou * , a operación de substitución aplícase a cada membro da matriz á súa vez, ea expansión é a lista resultante.

Substitución de comandos

A substitución de comandos permite a saída dun comando para substituír o nome do comando. Existen dúas formas:

$ ( comando )

ou

` comando`

Bash realiza a expansión executando o comando e substituíndo a substitución do comando coa saída estándar do comando, eliminando as novas liñas seguintes. As liñas novas incrustadas non se eliminan, pero poden eliminarse durante a división de palabras. A substitución de comando $ ( ficheiro de gato ) pode ser substituída polo equivalente pero máis rápido $ (< ficheiro ).

Cando se usa o estilo de substitución de estilo antigo, a barra invertida conserva o seu significado literal, agás cando é seguido por $ , ` ou \ . O primeiro backquote non precedido por unha barra invertida remata a substitución do comando. Ao usar o formulario $ ( comando ), todos os caracteres entre os parénteses compoñen o comando; Ninguén é tratado especialmente.

As substitucións de comandos poden estar aniñadas. Para anidar ao usar o formulario retrocedido, escápase das backquotes internas con versións inversas.

Se a substitución aparece dentro de comiñas dobres, a división de palabras ea ampliación da ruta non se realizan nos resultados.

Expansión aritmética

A expansión aritmética permite a avaliación dunha expresión aritmética ea substitución do resultado. O formato para a expansión aritmética é:

$ (( expresión ))

A expresión trátase como se estivese dentro de comiñas dobres, pero non se trata dunha cita dobre dentro dos parénteses. Todos os tokens na expresión son sometidos a expansión de parámetros, expansión de cadea, substitución de comandos e eliminación de presupostos. As substitucións aritméticas poden ser aniñadas.

A avaliación realízase de acordo coas regras enumeradas a continuación de acordo coa AVALIACIÓN ARITÉMICA . Se a expresión non é válida, bash imprime unha mensaxe que indica falla e non se produce ningunha substitución.

Cambio de procesos

A sustitución do proceso é compatible con sistemas que soportan canalizacións nomeadas ( FIFOs ) ou o método / dev / fd de nomear ficheiros abertos. Toma a forma de <( lista ) ou > ( lista ) . A lista de procesos execútase coa súa entrada ou saída conectada a un FIFO ou algún ficheiro en / dev / fd . O nome deste ficheiro pasa como argumento ao comando actual como resultado da expansión. Se se usa o formulario ( list ) , escribindo no ficheiro proporcionará unha entrada para a lista . Se se usa o formulario <( lista ) , o ficheiro transcorrido como argumento debe ser lido para obter a saída da lista .

Cando está dispoñible, a substitución do proceso realízase simultaneamente co parámetro e a expansión variable, a substitución do comando e a expansión aritmética.

División de palabras

O shell explora os resultados da expansión de parámetros, a substitución de comandos ea expansión aritmética que non se producían dentro de comiñas dobres para a división de palabras .

A casca trata cada carácter de IFS como un delimitador e divide os resultados das outras expansións en palabras sobre estes personaxes. Se IFS non está establecido, ou o seu valor é exactamente , por defecto, entón calquera secuencia de caracteres IFS serve para delimitar palabras. Se IFS ten un valor distinto do predeterminado, as secuencias de espazo e tabulación dos espazos en branco ignóranse ao comezo e ao final da palabra, sempre que o carácter do espazo en branco estea no valor IFS (un espazo de espazo en branco IFS ). Calquera caracter de IFS que non sexa un espazo en branco IFS , xunto con todos os caracteres de espazo en branco IFS adxacentes, delimita un campo. Unha secuencia de caracteres de espazo en branco IFS tamén é tratada como un delimitador. Se o valor de IFS é nulo, non se produce unha división de palabras.

Engádense argumentos nulos explícitos ( "" ou "" ). Non se eliminan os argumentos nulos implícitos no resultado, derivados da expansión de parámetros que non teñen valores. Se un parámetro sen valor se expande dentro de comiñas dobres, un argumento nulo resulta e mantense.

Nótese que se non se produce unha expansión, non se realiza ningunha división.

Expansión de nome de ruta

Despois da división de palabras, a menos que se configure a opción -f , bash busca cada palabra para os caracteres * ,? e [ . Se aparece un destes caracteres, a palabra considérase un patrón e substitúese por unha lista ordenada alfabéticamente de nomes de ficheiros que coincidan co patrón. Se non se atopan nomes de ficheiros coincidentes e a opción shell intersección nula está desactivada, a palabra non se modifica. Se a opción nullglob está configurada e non se atopan coincidencias, a palabra elimínase. Se a opción shell nocaseglob está activada, a coincidencia realízase sen ter en conta o caso de caracteres alfabéticos. Cando se usa un patrón para a expansión do nome de camiño, o carácter ``. '' Ao comezo dun nome ou inmediatamente despois dunha barra inclinada debe coincidir explícitamente, a menos que se configure o punto de acceso da opción shell. Ao emparejar un nome de ruta, o carácter de barra sempre debe coincidir explícitamente. Noutros casos, o carácter ``. '' Non se trata especialmente. Consulte a descrición de shopt debaixo de COMMELLS SHELL BUILTIN para obter unha descrición das opcións de shell nocaseglob , nullglob e dotglob .

A variable shell de GLOBIGNORE pode usarse para restrinxir o conxunto de nomes de ficheiros que coincidan cun patrón . Se se establece GLOBIGNORE , cada nome de ficheiro coincidente que coincide tamén cun dos patróns en GLOBIGNORE é eliminado da lista de coincidencias. Os nomes de ficheiro ``. '' E `` .. '' sempre son ignorados, mesmo cando se establece GLOBIGNORE . Non obstante, configurar GLOBIGNORE ten como efecto activar a opción shell de puntos , polo que todos os demais nomes de ficheiro que comezan cun ``. '' Coincidirán . Para obter o comportamento anterior de ignorar os nomes dos ficheiros que comezan cun ``. '' , Faga que ``. * '' '' Un dos patróns en GLOBIGNORE . A opción dotglob está desactivada cando GLOBIGNORE está desactivado.

Patrón de correspondencia

Calquera carácter que apareza nun estándar, ademais dos caracteres de patrón especial descritos a continuación, combínase. O carácter NUL pode non ocorrer nun patrón. Os caracteres especiais de patrón deben ser citados se se combinan literalmente.

Os caracteres de patrón especial teñen os seguintes significados:

*

Coincide con calquera cadea, incluída a cadea nula.

¿?

Coincide con calquera personaxe.

[...]

Coincide con calquera dos caracteres incluídos. Un par de caracteres separados por un guión denota unha expresión de intervalo ; calquera carácter que se clasifique entre estes dous caracteres, inclusive, usando a secuencia de comparación e conxunto de caracteres da localización actual, coincide. Se o primeiro carácter que segue o [ é a ! ou a ^ entón calquera carácter non encerrado coincide. O orde de clasificación dos caracteres nas expresións de rango determina a configuración actual eo valor da variábel LC_COLLATE shell, se está definido. A - pode combinalo incluílo como o primeiro ou último personaxe do conxunto. A ] pode combinalo incluílo como o primeiro personaxe do conxunto.

Dentro [ e ] , pódense especificar clases de caracteres empregando a sintaxe [: class :] , onde a clase é unha das seguintes clases definidas no estándar POSIX.2:

alnum alpha ascii blank cntrl díxito gráfico inferior imprimir punct space palabra superior xdigit
A clase de personaxe coincide con calquera personaxe pertencente a esa clase. A clase de caracteres da palabra coincide con letras, díxitos e carácter _.

Dentro [ e ] , pódese especificar unha clase de equivalencia empregando a sintaxe [= c =] , que coincide con todos os caracteres co mesmo peso de compilación (como se define pola configuración actual) como o carácter c .

Dentro [ e ] , a sintaxe [. símbolo ]. coincide co símbolo de combinación de símbolos .

Se a opción de extensión de extensión está habilitada usando o built-in de tendas , recoñécese varios operadores de correspondencia de patrón prolongado. Na seguinte descrición, unha lista de patróns é unha lista de un ou máis patróns separados por un . Os patróns compostos poden formarse usando un ou máis dos seguintes sub-patróns:

? ( lista de patróns )

Corresponde cero ou unha aparición dos patróns indicados

* ( lista de patróns )

Coincide con cero ou máis aparicións dos patróns indicados

+ ( lista de padrón )

Corresponde cunha ou máis aparicións dos patróns indicados

@ ( lista de patróns )

Concorda exactamente un dos patróns indicados

! ( lista de patróns )

Coincide con calquera cousa excepto un dos patróns indicados

Eliminación de cotas

Despois das expansións anteriores, elimináronse todas as aparicións non cotizadas dos caracteres \ , ' e " que non se deron a partir dunha das expansións anteriores.

REDIRECCIÓN

Antes de executar un comando, a súa entrada e saída pode ser redirixida empregando unha notación especial interpretada polo shell. A redirección tamén se pode usar para abrir e pechar ficheiros para o contorno de execución do shell actual. Os seguintes operadores de redirección poden preceder ou aparecer en calquera lugar dentro dun comando simple ou poden seguir un comando . As redireccións son procesadas na orde que aparecen, de esquerda a dereita.

Nas seguintes descricións, se se omite o número do descriptor de ficheiro e o primeiro carácter do operador de redirección é < , a redirección refírese á entrada estándar (descriptor de ficheiro 0). Se o primeiro carácter do operador de redirección é > , a redirección refírese á saída estándar (descriptor de ficheiro 1).

A palabra seguinte ao operador de redireccionamiento nas seguintes descricións, a menos que se indique o contrario, está suxeita a expansión de engrenaxe, expansión de tilde, expansión de parámetros, substitución de comando, expansión aritmética, eliminación de cotas, expansión de ruta e división de palabras. Se se expande a máis dunha palabra, bash informa dun erro.

Teña en conta que a orde das redireccións é significativa. Por exemplo, o comando

ls > dirlist 2 > & 1

dirixe tanto a saída estándar como o erro estándar ao ficheiro dirlist , mentres que o comando

ls 2 > e 1 > dirlist

dirixe só a saída estándar para o ficheiro dirlist , porque o erro estándar duplicouse como saída estándar antes de que a saída estándar se redireccionase a dirlist .

Bash manexa varios nomes de ficheiro especialmente cando se usan en redireccións, como se describe na seguinte táboa:

/ dev / fd / fd

Se fd é un enteiro válido, o ficheiro fd está duplicado.

/ dev / stdin

O ficheiro 0 está duplicado.

/ dev / stdout

O ficheiro 1 está duplicado.

/ dev / stderr

O duplicado de ficheiro 2 está duplicado.

/ dev / tcp / host / port

Se o servidor é un nome de servidor válido ou unha dirección de Internet e o porto é un número de porto enteiro ou nome de servizo, bash intenta abrir unha conexión TCP co socket correspondente.

/ dev / udp / host / port

Se o servidor é un nome de máquina válido ou unha dirección de Internet e o porto é un número de porto enteiro ou nome de servizo, bash intenta abrir unha conexión UDP co socket correspondente.

A falla para abrir ou crear un ficheiro fai que a redirección fale.

Redirixindo a entrada

A redirección de entrada fai que o ficheiro cuxo nome resulte da expansión da palabra que se abre para ler no descriptor de ficheiro n , ou a entrada estándar (descriptor de ficheiro 0) se non se especifica n .

O formato xeral para a redirección de entrada é:

[ n ] < palabra

Redirixindo a saída

A redirección da saída provoca que o ficheiro cuxo nome resulte da expansión da palabra que se abrirá para escribir no descriptor de ficheiro n , ou a saída estándar (descriptor de ficheiro 1) se non se especifica n . Se o ficheiro non existe créase; Se existe existe truncada a cero.

O formato xeral para redireccionar a saída é:

[ n ] > palabra

Se o operador de redirección é > e a opción noclobber do conxunto integrado foi habilitada, a redirección fallará se o ficheiro cuxo nome resulta da expansión da palabra existe e é un ficheiro normal. Se o operador de redirección é > | , ou o operador de redirección > e a opción noclobber para o comando set builtin non está activado, inténtase a redirección mesmo se existe o ficheiro chamado por palabra .

Engadiuse a saída redirixida

A redirección da saída deste xeito fai que o ficheiro cuxo nome resulte da expansión da palabra que se abre para engadir no descriptor de ficheiro n , ou a saída estándar (descriptor de ficheiro 1) se non se especifica n . Se o ficheiro non existe, créase.

O formato xeral para engadir a saída é:

[ n ] >> palabra

Redirixindo a saída estándar e o erro estándar

Bash permite que a saída estándar (descriptor de ficheiro 1) ea saída estándar de erro (descriptor de ficheiro 2) se redirixan ao ficheiro cuxo nome é a expansión da palabra con esta construción.

Existen dous formatos para redireccionar a saída estándar e o erro estándar:

&> palabra

e

> & palabra

Das dúas formas, o primeiro é o preferido. Isto semánticamente equivalente a

> palabra 2 > e 1

Aquí documentos

Este tipo de redirección instruye o shell para ler a entrada da fonte actual ata que se ve unha liña que contén só unha palabra (sen espazos en branco). Todas as liñas que se lean a ese punto úsanse como entrada estándar para un comando.

O formato de documentos aquí é:

<< [ - ] palabra aquí-documento delimitador

Non se realiza ningunha expansión de parámetros, substitución de comandos, expansión aritmética ou expansión de camiño. Se se citan algúns caracteres na palabra , o delimitador é o resultado da eliminación de cotas en palabras e as liñas do documento aquí non se expanden. Se a palabra non está clasificada, todas as liñas do documento aquí están suxeitas a expansión de parámetros, substitución de comandos e expansión aritmética. Neste último caso, a secuencia de caracteres \ é ignorada e \ debe ser usada para citar os caracteres \ , $ e ` .

Se o operador de redireccionamento é << - , todos os caracteres de tabulación principais son eliminados das liñas de entrada e da liña que contén o delimitador . Isto permite que os documentos dentro dos scripts do shell sexan sangrados de forma natural.

Aquí Cordas

Unha variante de documentos aquí, o formato é:

<<< palabra

A palabra é expandida e subministrada ao comando na súa entrada estándar.

Duplicar os descritores de ficheiros

O operador de redirección

[ n ] palabra

úsase para duplicar os descritores de ficheiros de entrada. Se a palabra se expande a un ou máis díxitos, o descriptor de ficheiro denotado por n está feito para ser unha copia dese descriptor de ficheiro. Se os díxitos en palabra non especifican un descriptor de ficheiro aberto para a entrada, prodúcese un erro de redirección. Se a palabra avaliar - , o ficheiro n está pechado. Se n non se especifica, úsase a entrada estándar (descriptor de ficheiro 0).

O operador

[ n ] > & palabra

úsase de forma similar aos descritores de ficheiros de saída duplicados. Se n non se especifica, úsase a saída estándar (descriptor de ficheiro 1). Se os díxitos na palabra non especifican un descriptor de ficheiro aberto para a saída, prodúcese un erro de redirección. Como caso especial, se omítese n , e a palabra non se expande a un ou máis díxitos, a saída estándar eo erro estándar redirixíronse como se describiu anteriormente.

Descriptores de ficheiros en movemento

O operador de redirección

[ n ] díxitos -

move o díxito do descriptor de ficheiro ao descriptor de ficheiro n , ou a entrada estándar (descriptor de ficheiro 0) se non se especifica n . O díxito péchase despois de duplicarse a n .

Do mesmo xeito, o operador de redirección

[ n ] > e díxito -

move o díxito do descriptor de ficheiro ao descriptor de ficheiro n , ou a saída estándar (descriptor de ficheiro 1) se non se especifica n .

Apertura de descritores de arquivos para ler e escribir

O operador de redirección

[ n ] <> palabra

fai que o ficheiro cuxo nome sexa a expansión da palabra a abrir tanto para lectura como para escribir no descriptor de ficheiro n , ou no descriptor de ficheiro 0 si n non se especifica. Se o ficheiro non existe, créase.

ALIASES

Os alias permiten substituír unha cadea por unha palabra cando se usa como a primeira palabra dun comando simple. O shell mantén unha lista de alias que se poden configurar e desmarcar co alias e os comandos integrados integrados (consulte SHELL BUILTIN COMMANDS a continuación). A primeira palabra de cada comando, se non está seleccionada, está marcada para ver se ten un alias. Se é así, esa palabra substitúese polo texto do alias. O nome do alias e o texto de substitución poden conter calquera entrada de shell válida, incluídos os metacaracteres enumerados anteriormente, coa excepción de que o nome do alias non conteña. A primeira palabra do texto de substitución está probada para os alias, pero unha palabra que é idéntica a un alias que se está a expandir non se expande por segunda vez. Isto significa que se un alias ls a ls -F , por exemplo, e bash non intenta expandir recursivamente o texto de substitución. Se o último carácter do valor do alias é un espazo en branco , tamén se verifica a seguinte palabra de comando seguinte ao alias para a expansión de alias.

Os alias son creados e listados co comando alias e elimináronse co comando unalias .

Non hai ningún mecanismo para usar argumentos no texto de substitución. Se se necesitan argumentos, debería usarse unha función de shell (consulte FUNCIÓNS a continuación).

Os alias non se expanden cando o shell non é interactivo, a menos que a opción expand_aliases shell configúrase usando shopt (consulte a descrición de shopt en SHELL BUILTIN COMMANDS a continuación).

As regras relativas á definición e uso dos alias son un tanto confusas. Bash sempre leu polo menos unha liña de entrada completa antes de executar calquera dos comandos nesa liña. Os alias se expanden cando se leva un comando, non cando se executa. Polo tanto, unha definición de alias que aparece na mesma liña que outro comando non ten efecto ata que se le a seguinte liña de entrada. Os comandos que seguen a definición de alias nesa liña non se verán afectados polo novo alias. Este comportamento tamén é un problema cando se executan as funcións. Os alias se expanden cando se leva unha definición de función, non cando se executa a función, porque unha definición de función é en si un comando composto. Como consecuencia, os alias definidos nunha función non están dispoñibles ata que se execute esa función. Para estar seguro, sempre coloque definicións de alias nunha liña separada e non use alias nos comandos compostos.

Para case todos os fins, os alias son substituídos por funcións shell.

FUNCIÓNS

Unha función de shell, definida como descrita anteriormente en SHELL GRAMMAR , almacena unha serie de comandos para unha posterior execución. Cando se usa o nome dunha función de shell como un nome de comando simple, execútase a lista de comandos asociados con ese nome de función. As funcións executáronse no contexto da shell actual; non se crea ningún novo proceso para interpretalos (contrasta isto coa execución dun script shell). Cando se executa unha función, os argumentos á función converten os parámetros de posición durante a súa execución. O parámetro especial # actualízase para reflectir o cambio. O parámetro posicional 0 non se modifica. A variable FUNCNAME está axustada ao nome da función mentres se executa a función. Todos os outros aspectos do contorno de execución de shell son idénticos entre unha función ea súa chamada coa excepción de que a trampa DEBUG (vexa a descrición da trampa integrada en SHELL BUILDING COMMANDS a continuación) non se herdará a menos que a función recibise o atributo traza ( vexa a descrición da declaración construída a continuación).

As variábeis locais para a función poden ser declaradas co comando builtin local . Normalmente, as variables e os seus valores son compartidas entre a función eo seu chamador.

Se o comando builtin regresa execútase nunha función, a función complétase e a execución retomase co seguinte comando despois da chamada de función. Cando se completa unha función, os valores dos parámetros de posición e do parámetro especial # restauraranse aos valores que tiñan antes da execución da función.

Os nomes e definicións de funcións poden estar listados coa opción -f aos comandos declare ou typeset builtin. A opción -F para declarar ou escribir enumerará só os nomes das funcións. As funcións poden ser exportadas para que os subconjuntos teñan automaticamente definidos coa opción -f para a exportación incorporada.

As funcións poden ser recursivas. Non se impón límite no número de chamadas recursivas.

EVALUACIÓN ARITMÉTICA

O shell permite que se evalúen expresións aritméticas, baixo certas circunstancias (vexa o comando let builtin e Expansión aritmética ). A avaliación faise en números enteiros de ancho fixo sen verificar o desbordamiento, aínda que a división por 0 está atrapada e marcada como un erro. Os operadores ea súa precedencia e asociatividade son os mesmos que no idioma C. A seguinte lista de operadores está agrupada en niveis de operadores de igualdade de precedencia. Os niveis están listados en orde de prevalencia decrecente.

ID id + id -

variable post-incremento e post-decremento

ID de + id

pre-incremento e pre-decremento variables

- +

unario menos e máis

! ~

negación lóxica e bit a bit

**

exponenciación

* /%

multiplicación, división, resto

+ -

suma, resta

<< >>

á esquerda e á dereita cambios de bit a bit

<=> = <>

comparación

==! =

igualdade e desigualdade

&

bitwise AND

^

OR exclusivo bit a bit

|

bitwise OR

&&

lóxico AND

||

OR lóxico

expr ? expr : expr

avaliación condicional

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

asignación

expr1 , expr2

coma

As variables concha permítense como operandos; A expansión dos parámetros realízase antes de evaluar a expresión. Dentro dunha expresión, as variables shell tamén poden ser referenciadas por nome sen usar a sintaxe de expansión de parámetros. O valor dunha variable é avaliado como unha expresión aritmética cando se fai referencia. Unha variable concha non necesita que o seu atributo enteiro estea activado para ser usado nunha expresión.

As constantes con 0 principais están interpretadas como números octales. Un 0x líder ou 0X denota hexadecimal. Se non, os números toman a forma [ base # ] n, onde a base é un número decimal entre 2 e 64 que representa a base aritmética, e n é un número nesa base. Se se omite a base # , entón emprégase a base 10. Os díxitos maiores que 9 están representados polas minúsculas, as letras maiúsculas, @ e _, nesa orde. Se a base é inferior ou igual a 36, ​​minúsculas e maiúsculas poden usarse intercambiábeis para representar números entre 10 e 35.

Os operadores son avaliados por orde de precedencia. As subexpresións entre parénteses son avaliadas primeiro e poden anular as regras de precedencia anteriores.

EXPRESIÓNS CONDICIÓNS

As expresións condicionais son utilizadas polo [[ comando composto e a proba e [ comandos integrados para probar os atributos do ficheiro e executan comparacións de cordo e aritmética. As expresións están formadas a partir das seguintes primarias unarias ou binarias. Se algún argumento de ficheiro a unha das primeiras é da forma / dev / fd / n , está marcado o descriptor n de ficheiro. Se o argumento de ficheiro a unha das primarias é un / dev / stdin , / dev / stdout , ou / dev / stderr , o marcador de ficheiro 0, 1 ou 2, respectivamente, está marcado.

-un ficheiro

Verdadeiro se o ficheiro existe.

ficheiro -b

Verdadeiro se o ficheiro existe e é un ficheiro especial de bloque.

-c ficheiro

É verdadeiro se o ficheiro existe e é un ficheiro de carácter especial.

-d ficheiro

Verdadeiro se o ficheiro existe e é un directorio.

-e ficheiro

Verdadeiro se o ficheiro existe.

ficheiro -f

Verdadeiro se o ficheiro existe e é un ficheiro normal.

ficheiro -g

É verdadeiro se o ficheiro existe e está definido como grupo-id.

ficheiro -h

É verdadeiro se o ficheiro existe e é unha ligazón simbólica.

-k ficheiro

É verdadeiro se existe o ficheiro eo seu bit `` sticky '' está configurado.

ficheiro p

Verdadeiro se o ficheiro existe e é un pipe nomeado (FIFO).

ficheiro -r

Verdadeiro se o ficheiro existe e é lexible.

-s ficheiro

Verdadeiro se o ficheiro existe e ten un tamaño maior que cero.

-t fd

É verdadeiro se o descriptor de ficheiro fd está aberto e refírese a un terminal.

-un ficheiro

É verdadeiro se existe o ficheiro eo seu bit id-set-user está configurado.

-w ficheiro

É verdadeiro se o ficheiro existe e é posible escribir.

-x ficheiro

Verdadeiro se o ficheiro existe e é executable.

-O ficheiro

É verdadeiro se o ficheiro existe e é propiedade do ID de usuario efectivo.

-G ficheiro

É verdadeiro se o ficheiro existe e é propiedade do id de grupo efectivo.

-L ficheiro

É verdadeiro se o ficheiro existe e é unha ligazón simbólica.

-S ficheiro

Verdadeiro se o ficheiro existe e é un socket.

-N ficheiro

Verdadeiro se o ficheiro existe e foi modificado desde que foi lido por última vez.

file1 - nt file2

É verdadeiro se o ficheiro 1 é máis novo (de acordo coa data de modificación) que o arquivo2 , ou se file1 existe eo ficheiro2 non.

file1 - ot file2

É verdadeiro se o ficheiro 1 é máis antigo que o arquivo2 , ou se file2 existe e file1 non.

file1 -f file2

Verdadeiro se file1 e file2 fan referencia ao mesmo dispositivo e aos números de inode.

-o optname

É verdadeiro se está habilitada a opción optname da opción shell. Vexa a lista de opcións baixo a descrición da opción -o ao conxunto que figura abaixo.

-z cadea

Verdadeiro se a lonxitude da cadea é cero.

-n cadea

cordel

Verdadeiro se a lonxitude da cadea non é cero.

string1 == cadea2

Verdadeiro se as cadeas son iguais. = pódese empregar no lugar de == para un estrito cumprimento de POSIX.

string1 ! = cadea2

Verdadeiro se as cadeas non son iguais.

string1 < string2

É verdadeiro se string1 ordena antes string2 lexicográficamente na configuración actual.

string1 > string2

É verdadeiro se string1 ordena a cadea2 lexicográficamente na configuración actual.

arg1 OP arg2

OP é un dos -eq , -ne , -lt , -le , -gt ou -ge . Estes operadores binarios aritméticos volven verdadeiros se arg1 é igual a, non igual a, inferior a, menor ou igual a, maior que ou superior ou igual a arg2 , respectivamente. Arg1 e arg2 poden ser enteiros positivos ou negativos.

EXPANSIÓN SIMPLE COMMAND

Cando se executa un comando simple, o shell realiza as seguintes expansións, atribucións e redireccións, de esquerda a dereita.

1.

As palabras que o analizador marcou como asignacións variables (as que preceden ao nome do comando) e as redireccións gárdanse para o procesamento posterior.

2.

As palabras que non son asignacións variables ou redireccións son expandidas. Se algunha palabra permanece despois da expansión, a primeira palabra toma para ser o nome do comando e as palabras restantes son os argumentos.

3.

As redireccións realízanse como se describe arriba en REDIRECCIÓN .

4.

O texto despois do = en cada asignación de variables sofre a expansión de tilde, a expansión de parámetros, a substitución de comandos, a expansión aritmética ea eliminación de presupostos antes de ser asignada á variable.

Se non hai resultados de nome de comando, as asignacións de variables afectan o contorno actual do shell. En caso contrario, as variables engádense ao ambiente do comando executado e non afectan o contorno actual do shell. Se algunha das tarefas intenta asignar un valor a unha variable lexítima, ocorre un erro e o comando sae cun estado non cero.

Se non hai ningún nome de comando, as redireccións realízanse, pero non afectan o contorno actual do shell. Un erro de redirección fai que o comando saia cun estado non cero.

Se hai un nome de comando despois da expansión, a execución prosegue como se describe a continuación. Se non, o comando sae. Se unha das expansións contiña unha substitución de comando, o estado de saída do comando é o estado de saída da última substitución de comandos realizada. Se non houbo substitucións de comando, o comando sae cun estado de cero.

EXECUCIÓN DE COMANDO

Despois de dividir un comando en palabras, se resulta un comando simple e unha lista de argumentos opcionais, tómanse as seguintes accións.

Se o nome do comando non contén barras, o intérprete intenta localizalo. Se existe unha función de shell por ese nome, esa función invócase como se describiu anteriormente en FUNCTIONS . Se o nome non coincide cunha función, o intérprete de ordes busca nela na lista de compoñentes integrados. Se se encontra unha coincidencia, invócase o builtin.

Se o nome non é unha función de shell nin un builtin e non contén barras, bash busca cada elemento do PATH para un directorio que contén un ficheiro executable por ese nome. Bash usa unha táboa hash para lembrar os nomes de rutas completos dos ficheiros executables (consulte o hash baixo SHELL BUILTIN COMMANDS a continuación). A procura completa dos directorios en PATH realízase só se o comando non se atopa na táboa hash. Se a busca non ten éxito, o shell imprime unha mensaxe de erro e devolve un estado de saída de 127.

Se a busca é exitosa ou se o nome do comando contén unha ou máis barras, a shell executa o programa nomeado nun ambiente de execución separado. O argumento 0 está configurado no nome dado e os argumentos restantes no comando están definidos nos argumentos indicados, se hai.

Se esta ejecución falla porque o ficheiro non está en formato executable e o ficheiro non é un directorio, suponse que é un script de shell , un ficheiro que contén comandos shell. Engádese un subshell para executalo. Este subshell reinicialízase a si mesmo, de xeito que o efecto é coma se se invocase un novo shell para manipular o script, coa excepción de que o neno conserva as localizacións dos comandos que lembra o pai (ver o hash máis abaixo de SHELL BUILDING COMMANDS ).

Se o programa é un ficheiro que comeza con #! , o resto da primeira liña especifica un intérprete para o programa. O shell executa o intérprete especificado en sistemas operativos que non manexan este formato executable. Os argumentos ao intérprete consisten nun único argumento opcional seguindo o nome do intérprete na primeira liña do programa, seguido do nome do programa, seguido dos argumentos de comando, se hai.

ENTORNO DE EJECUCIÓN DE COMANDOS

O shell ten un contorno de execución que consiste no seguinte:

*

abra os ficheiros herdados polo intérprete de comandos en invocación, tal e como se modifican as redireccións subministradas ao executado

*

o directorio de traballo actual establecido por cd , pushd ou popd ou herdado polo shell en invocación

*

a máscara de modo de creación de ficheiros definida por umask ou herdada do pai do shell

*

trampas actuais trapadas

*

parámetros do shell que están definidos pola asignación de variables ou con conxunto ou herdado do pai do shell no contorno

*

Funcións de shell definidas durante a execución ou herdadas do pai do shell no contorno

*

opcións habilitadas na invocación (ou por defecto ou con argumentos da liña de comandos) ou por set

*

opcións activadas por shopt

*

Aliases de capas definidas con alias

*

varios ID de proceso, incluídos os de empregos de fondo, o valor de $ $$ eo valor de $ PPID

Cando se execute un comando simple que non sexa unha función integrada ou shell, invólvese nun contorno de execución separado que consiste no seguinte. A non ser que se indique o contrario, os valores son herdados do shell.

*

os ficheiros abertos do shell, ademais de calquera modificación e adición especificada por redireccións ao comando

*

o directorio de traballo actual

*

a máscara de modo de creación de ficheiros

*

as variables de shell marcadas para a exportación, xunto coas variables exportadas para o comando, pasadas no contorno

*

as trampas capturadas polo shell resetanse nos valores que herdaron do pai do shell e as trampas ignoradas polo shell ignóranse

Un comando invocado neste ambiente separado non pode afectar o ambiente de execución do shell.

Substitución de comandos e ordes asíncronos son invocados nun entorno de subconxuntos que é un duplicado do contorno do shell, agás que as trampas capturadas polo intérprete de comandos resetanse aos valores que o shell herdou do seu pai cando está invocado. Os comandos incorporados que son invocados como parte dunha canalización tamén se executan nun entorno de subsolo. Os cambios realizados no entorno do subsolo non poden afectar o ambiente de execución do shell.

Se un comando é seguido por un control de & e traballo non está activo, a entrada estándar estándar para o comando é o ficheiro baleiro / dev / null . Se non, o comando invocado herda os descritores de ficheiros do shell de chamada como se modificou as redireccións.

VER TAMÉN

Manual de referencia Bash , Brian Fox e Chet Ramey

A Biblioteca Gnu Readline , Brian Fox e Chet Ramey

A Biblioteca de Historia de Gnu , Brian Fox e Chet Ramey

Interface de sistema operativo portátil (POSIX) Parte 2: Shell e utilidades , IEEE

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

emacs (1), vi (1)

readline (3)