BASH(1)

NOMBRE
bash - GNU Bourne-Again SHell (el Shell de Bourne otra vez, de GNU)

SINOPSIS
bash [opciones] [fichero]

DERECHOS DE COPIA
Bash es Copyright © 1989, 1991, 1993, 1995, 1996 por la Free Software Foundation, Inc.

DESCRIPCIÓN
Bash es un intérprete de un lenguaje de órdenes compatible con sh que ejecuta órdenes leídas desde la entrada estándar o desde un fichero. Bash también incorpora características útiles tomadas de los shells de Korn y C (ksh y csh).

Bash está pensado con la intención de ser una implementación conforme con la especificación POSIX de Shell y Herramientas, de la IEEE (Grupo de Trabajo 1003.2 de la IEEE).

OPCIONES
Además de las opciones de un solo carácter documentadas en la descripción de la orden interna set, bash interpreta las siguientes opciones cuando es llamado:

-c cadena
    Si la opción -c está presente, entonces las órdenes se leen de cadena. Si hay argumentos tras la cadena, se asignan a los parámetros posicionales, empezando por $0.
-r  Si la opción -r está presente, entonces el shell se vuelve restringido (vea SHELL RESTRINGIDO más abajo).
-i  Si la opción -i está presente, el shell es interactivo.
-s  Si la opción -s está presente, o si no quedan argumentos tras el procesado de las opciones, entonces las órdenes se leen desde la entrada estándar. Esta opción permite definir los parámetros posicionales cuando se llama a un shell interactivo.
-D  Se muestra en la salida estándar una lista de cadenas de caracteres entrecomilladas precedidas por $. Estas cadenas son las que están sujetas a traducción cuando la localización en curso no es C ni POSIX. Esta opción implica también la -n; no se ejecuta ninguna orden.
--  Un -- señala el fin de las opciones e inhabilita cualquier posterior procesado de opciones. Cualesquier argumentos tras -- se tratan como nombres de fichero y argumentos. Un argumento - es equivalente a --.

Bash también interpreta una variedad de opciones multi-carácter. Estas opciones deben aparecer en la línea de órdenes antes de las opciones de un solo carácter para que puedan ser reconocidas.

--dump-po-strings
    Equivalente a -D, pero la salida es en el formato de un fichero po (objeto portable), del gettext de GNU.
--dump-strings
    Equivalente a -D.
--help
    Muestra un mensaje de modo de empleo en la salida estándar y acaba con éxito.
--login
    Hace que bash actúe como si se le hubiera llamado como un shell de entrada (vea LLAMADA más abajo).
--noediting
    No utiliza la biblioteca de GNU readline para leer líneas de órdenes en interactivo.
--noprofile
    No lee ni el fichero de arranque de sistema ni ninguno de los ficheros de inicio personales ~/.bash_profile, ~/.bash_login, ni ~/.profile. Por omisión, bash lee estos ficheros cuando se le llama como un shell de entrada (vea LLAMADA más adelante).
--norc
    No lee ni ejecuta el fichero de inicio personal ~/.bashrc si el shell es interactivo. Esta opción está activa de forma predeterminada si el shell se llama como sh.
--posix
    Cambia el comportamiento de bash donde la operación normal difiera del estándar POSIX 1003.2, de forma que concuerde con éste.
--rcfile fichero
    Ejecuta órdenes desde fichero en vez de desde el fichero de inicio personal estándar ~/.bashrc si el shell es interactivo (vea LLAMADA más abajo).
--restricted
    El shell se vuelve restringido (vea SHELL RESTRINGIDO más abajo).
--verbose
    Equivale a -v.
--version
    Muestra información en la salida estándar sobre la versión de esta instanciación de bash y acaba con éxito.

ARGUMENTOS
Si quedan argumentos tras el procesado de las opciones, y no se han dado ni la opción -c ni la -s, se supone que el primer argumento es el nombre de un fichero que contiene órdenes del shell. Si bash se llama de esta manera, $0 se define con el nombre del fichero, y los parámetros posicionales se definen con los restantes argumentos. Bash lee y ejecuta órdenes de este fichero, luego acaba. El estado de salida de bash es el de la última orden ejecutada en el guión. Si no se ejecuta ninguna orden, el estado de salida es 0.

LLAMADA
Un shell de entrada es aquél cuyo primer carácter del argumento cero es un -, o uno que ha sido llamado con la opción --login.

Un shell interactivo es uno cuya entrada y salida estándares están conectadas a terminales (según determina isatty(3)), o uno que ha sido llamado con la opción -i. Se define PS1 y $- incluye i si bash es interactivo, permitiendo así a un guión del shell o a un fichero de arranque el comprobar este estado.

Los siguientes párrafos describen cómo bash ejecuta sus ficheros de arranque. Si cualquiera de los ficheros existe pero no puede leerse, bash informa de un error. Las tildes de la ñ se expanden en nombres de ficheros como se describe más abajo en Expansión de la tilde en la sección EXPANSIÓN.

Cuando bash se llama como un shell de entrada interactivo, primero lee y ejecuta órdenes desde el fichero /etc/profile, si es que existe. Tras leer ese fichero, busca ~/.bash_profile, ~/.bash_login, y ~/.profile, en ese orden, y lee y ejecuta órdenes del primero de ellos que exista y se pueda leer. La opción --noprofile puede emplearse cuando se llame al shell para inhibir este comportamiento.

Cuando un shell de entrada termina, bash lee y ejecuta órdenes desde el fichero ~/.bash_logout, si existe.

Cuando se arranca un shell interactivo que no es de entrada, bash lee y ejecuta órdenes desde ~/.bashrc, si es que existe. Esto puede evitarse mediante la opción --norc. La opción --rcfile fichero forzará a bash a leer y ejecutar órdenes desde fichero en vez de ~/.bashrc.

Cuando bash se arranque de forma no interactiva, por ejemplo para ejecutar un guión del shell, busca la variable BASH_ENV en el entorno, expande su valor si está definida, y utiliza el valor expandido como el nombre de un fichero a leer y ejecutar. Bash se comporta como si se ejecutaran las siguientes órdenes:

    if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

pero el valor de la variable PATH no se emplea para buscar el nombre del fichero.

Si bash se llama con el nombre sh, intenta imitar el comportamiento de arranque de versiones históricas de sh tanto como sea posible, pero sin salirse del estándar POSIX. Cuando se llama como un shell interactivo de entrada, primero intenta leer y ejecutar órdenes desde /etc/profile y ~/.profile, en ese orden. La opción --noprofile puede emplearse para inhibir este comportamiento. Cuando se llama como un shell interactivo con el nombre sh, bash busca la variable ENV, expande su valor si está definida, y emplea el valor expandido como el nombre de un fichero a leer y ejecutar. Como un shell llamado como sh no intenta leer y ejecutar órdenes desde cualquier otro fichero de arranque, la opción --rcfile no tiene efecto. Un shell no interactivo llamado con el nombre sh no intenta leer ningún fichero de arranque. Cuando se llama como sh, bash entra en modo posix después de leer los ficheros de arranque.

Cuando bash se arranca en modo posix, como ocurre cuando se da la opción de línea de órdenes --posix, sigue el estándar POSIX para los ficheros de arranque. En este modo, los shells interactivos expanden la variable ENV y se leen y ejecutan órdenes desde el fichero cuyo nombre es el valor expandido de dicha variable. No se lee ningún otro fichero de arranque.

Bash intenta determinar cuándo está siendo llamado por el demonio de shell remoto, usualmente rshd. Si bash determina que está siendo ejecutado por rshd, lee y ejecuta órdenes desde ~/.bashrc, si tal fichero existe y se puede leer. Esto no lo hará si se le llama con el nombre sh. La opción --norc puede emplearse para inhibir este comportamiento, y la opción --rcfile puede utilizarse para forzar la lectura de otro fichero, pero rshd no llama generalmente al shell con estas opciones ni permite que se den.

DEFINICIONES

Las siguientes definiciones se usan a través del resto de este documento.
blanco
    Un espacio en blanco o tabulación (tab).
palabra
    Una secuencia de caracteres considerados por el shell como una sola unidad. También se conoce como un lexema (token).
nombre
    Una palabra que consiste solamente en caracteres alfanuméricos y subrayados, y comienza con un carácter alfabético o un subrayado. También se llama identificador.
metacarácter
    Un carácter que, cuando no está entrecomillado, separa palabras. Uno de los siguientes:
    | & ; ( ) < > espacio tab
operador de control
    Un lexema que realiza una función de control. Es uno de los siguientes símbolos:
    || & && ; ;; ( ) | <nueva-línea>

PALABRAS RESERVADAS
Palabras reservadas son palabras que tienen un significado especial para el shell. Las siguientes palabras se reconocen como reservadas cuando no van entrecomilladas y, o son la primera palabra de una orden simple (vea GRAMÁTICA DEL SHELL más abajo) o la tercera palabra de una orden case o for:

! case do done elif else esac fi for function if in select then until while { } time [[ ]]

GRAMÁTICA DEL SHELL

  Órdenes simples

Una orden simple es una secuencia de asignaciones opcionales de variables seguida por palabras separadas por blancos y redirecciones, y terminadas por un operador de control. La primera palabra especifica la orden a ser ejecutada. Las palabras restantes se pasan como argumentos a la orden pedida.

El valor devuelto de una orden simple es su estado de salida, ó 128+n si la orden ha terminado debido a la señal n.

  Tuberías

Una tubería es una secuencia de una o más órdenes separadas por el carácter |. El formato de una tubería es:

    [time [-p]] [ ! ] orden [ | orden2 ... ]

La salida estándar de orden se conecta a la entrada estándar de orden2. Esta conexión se realiza antes que cualquier redirección especificada por la orden (vea REDIRECCIÓN más abajo).

Si la palabra reservada ! precede una tubería, el estado de salida de ésta es el NO lógico del de la última orden. De otro modo, el estado de la tubería es el de salida de la última orden. El shell espera que todas las órdenes de la tubería terminen antes de devolver un valor.

Si la palabra reservada time precede una tubería, se informa del tiempo transcurrido, así como del de usuario y sistema, consumido en la ejecución de la tubería, cuando ésta termina. La opción -p cambia el formato de salida al especificado por POSIX. La variable TIMEFORMAT puede definirse como una cadena de caracteres de formato que especifique cómo la información de tiempos debería mostrarse; vea la descripción de TIMEFORMAT bajo Variables del Shell más abajo.

Cada orden en una tubería se ejecuta como un proceso separado (esto es, en un subshell).

  Listas

Una lista es una secuencia de una o más tuberías separadas por uno de los operadores ;, &, &&, o ||, y terminada opcionalmente por uno de ;, &, o <nueva-línea>.

De estos operadores de listas, && y || tienen igual precedencia, seguidos por ; y &, que tienen igual precedencia.

Si una orden se termina mediante el operador de control &, el shell ejecuta la orden en segundo plano en un subshell. El shell no espera que la orden acabe, y el estado devuelto es 0. Las órdenes separadas por un ; se ejecutan secuencialmente; el shell espera que cada orden termine, por orden. El estado devuelto es el estado de salida de la última orden ejecutada.

Los operadores de control && y || denotan listas Y (AND) y O (OR) respectivamente. Una lista Y tiene la forma

    orden && orden2

orden2 se ejecuta si y sólo si orden devuelve un estado de salida 0.

Una lista O tiene la forma

    orden || orden2

orden2 se ejecuta si y sólo si orden devuelve un estado de salida distinto de cero. El estado de salida de las listas Y y O es el de la última orden ejecutada en la lista.

  Órdenes compuestas

Una orden compuesta es una de las siguientes:

(lista)
    lista se ejecuta en un subshell. Después de que la orden se completa, las asignaciones a variables y órdenes internas que afectaran al entorno del shell no permanecen en efecto. El estado de retorno es el de salida de lista.

{ lista; }
    lista se ejecuta simplemente en el entorno del shell en curso. lista debe terminarse con un salto de línea o un punto y coma. Esto se conoce como una orden de grupo. El estado de retorno es el de salida de lista.

((expresión))
    La expresión se evalúa de acuerdo a las reglas descritas abajo bajo la sección EVALUACIÓN ARITMÉTICA. Si el valor de la expresión es distinto de cero, el estado de retorno es 0; de otro modo el estado de retorno es 1. Esto es equivalente exactamente a let "expresión".

[[ expresión ]]
    Devuelve un estado de 0 ó 1 dependiendo de la evaluación de la expresión condicional expresión. Las expresiones se componen de las primarias descritas adelante bajo EXPRESIONES CONDICIONALES. No tienen lugar división de palabras ni expansión de nombres de camino en las palabras entre el [[ y el ]]; sí se realizan la expansión de tilde, expansión de parámetros y variables, expansión aritmética, sustitución de orden, sustitución de proceso y eliminación de comillas.

    Cuando se emplean los operadores == y !=, la cadena a la derecha del operador se considera un patrón y se hace concordar de acuerdo a las reglas descritas más adelante bajo el epígrafe Concordancia de patrones. El valor devuelto es 0 si la cadena concuerda o no concuerda con el patrón, respectivamente, y 1 en otro caso. Cualquier parte del patrón puede entrecomillarse para forzar la concordancia como una cadena de caracteres pura.

    Las expresiones pueden combinarse mediante los siguientes operadores, listados en orden decreciente de precedencia:

    ( expresión )
        Devuelve el valor de expresión. Esto puede emplearse para cambiar la precedencia normal de los operadores.
    ! expresión
        Verdad si expresión es falsa.
    expresión1 && expresión2
        Verdad si ambas expresión1 y expresión2 son verdaderas.
    expresión1 || expresión2
        Verdad si una al menos de expresión1 o expresión2 es verdad.

Los operadores && y || no ejecutan expresión2 si el valor de expresión1 es suficiente para determinar el valor de retorno de la expresión condicional entera.

for nombre [ in palabra; ] do lista ; done
    La lista de palabras que va detrás de in se expande, generando una lista de elementos. La variable nombre se define como cada elemento de la lista en cada iteración, y lista se ejecuta cada vez. Si la palabra de in se omite, la orden for ejecuta lista una vez para cada parámetro posicional que esté definido (vea PARÁMETROS más abajo). El estado de retorno es el de salida de la última orden que se ejecuta. Si la expansión de los elementos después del in resulta en una lista vacía, no se ejecuta ninguna orden y el estado de salida es 0.

select nombre [ in palabra; ] do lista ; done
    La lista de palabras que sigue a in se expande, generando una lista de elementos. El conjunto de palabras expandidas se muestra en la salida estándar de errores, cada una precedida por un número. Si la palabra del in se omite, se muestran los parámetros posicionales (vea PARÁMETROS más abajo). Entonces se muestra el indicador PS3 y se lee una línea desde la entrada estándar. Si la línea consiste en un número correspondiente a una de las palabras mostradas, entonces el valor de nombre se pone a esa palabra. Si la línea está vacía, las palabras y el indicador se muestran de nuevo. Si se lee EOF, la orden se completa. Cualquier otro valor leída hace que nombre se ponga a un valor vacío. La línea leída se guarda en la variable REPLY. La lista se ejecuta tras cada selección hasta que se ejecute una orden break o return. El estado de salida de select es el de la última orden ejecutada en lista, o cero si no se ha ejecutado ninguna orden.

case palabra in [ ( patrón [ | patrón ] ... ) lista ;; ] ... esac
    Una orden case expande primero palabra, e intenta hacerla concordar contra cada patrón por turnos, empleando las mismas reglas de concordancia que para la expansión de nombres de caminos (vea Expansión de nombre de camino más abajo). Cuando se encuentre una concordancia, se ejecuta la lista correspondiente. Tras la primera concordancia, no se intentan más. El estado de salida es cero si no concuerda ningún patrón. De otro modo, es el estado de salida de la última orden ejecutada en lista.

if lista; then lista; [ elif lista; then lista; ] ... [ else lista; ] fi
    La lista if se ejecuta. Si su estado de salida es cero, se ejecuta la lista then. De otro modo, se ejecuta por turno cada lista elif, y si su estado de salida es cero, se ejecuta la lista then correspondiente y la orden se completa. Si no, se ejecuta la lista then si está presente. El estado de salida es el de la última orden ejecutada, o cero si ninguna condición fue verdadera.

while lista; do lista; done
until lista; do lista; done
    La orden while ejecuta continuamente la lista do siempre que la última orden de lista devuelva un estado de salida cero. La orden until es idéntica a la while, excepto en que la comprobación es al revés; la lista do se ejecuta mientras que la última orden en lista devuelva un estado de salida distinto de cero. El estado de salida de las órdenes while y until es el de la última orden de la lista do ejecutada, o cero si no se ejecutó ninguna orden.

[ function ] nombre () { lista; }
    Esto define una función llamada nombre. El cuerpo de la función es la lista de órdenes entre { y } . Esta lista se ejecuta cada vez que se especifica nombre como el nombre de una orden simple. El estado de salida de una función es el de la última orden ejecutada en el cuerpo. (Vea FUNCIONES más abajo.)

COMENTARIOS
En un shell no interactivo, o en uno interactivo en el que la opción interactive_comments de la orden interna shopt está activa (vea ÓRDENES INCORPORADAS DEL SHELL más abajo), una palabra que empiece por # hace que esa palabra y todos los caracteres que queden en esa línea no sean tenidos en cuenta. Un shell interactivo sin la opción interactive_comments habilitada, no admite comentarios. La opción interactive_comments está activa de forma predeterminada en shells interactivos.

ENTRECOMILLADO
El entrecomillado se emplea para quitar el significado especial para el shell de ciertos metacaracteres o palabras. Puede emplearse para que no se traten caracteres especiales de forma especial, para que palabras reservadas no sean reconocidas como tales, y para evitar la expansión de parámetros.

Cada uno de los metacaracteres listados a continuación bajo el epígrafe DEFINICIONES tiene un significado especial para el shell y deben ser protegidos o entrecomillados si quieren representarse a sí mismos. Hay 3 mecanismos de protección: el carácter de escape, comillas simples, y comillas dobles.

Una barra inclinada inversa no entrecomillada (\) es el carácter de escape. Preserva el valor literal del siguiente carácter que lo acompaña, con la excepción de <nueva-línea>. Si aparece un par \<nueva-línea> y la barra invertida no está ella misma entre comillas, el \<nueva-línea> se trata como una continuación de linea (esto es, se quita del flujo de entrada y no se tiene efectivamente en cuenta).

Encerrar caracteres entre apóstrofos preserva el valor literal de cada carácter entre las comillas. Una comilla simple no puede estar entre comillas simples, ni siquiera precedida de una barra invertida.

Encerrar caracteres entre comillas dobles preserva el valor literal de todos los caracteres de dentro de las comillas, con la excepción de $, `, y \. Los caracteres $ y ` mantienen sus significados especiales dentro de comillas dobles. La barra invertida mantiene su significado especial solamente cuando está seguida por uno de los siguientes caracteres: $, `, "", \, o <nueva-línea>. Una comilla doble puede ser entrecomillada entre otras comillas dobles precediéndola de una barra invertida.

Los parámetros especiales * y @ tienen un significado especial cuando están entre comillas dobles (vea PARÁMETROS más abajo).

Las palabras de la forma $'cadena' se tratan de forma especial. La palabra se expanda a cadena, con los caracteres protegidos par barra invertida reemplazados según especifica el estándar ANSI/ISO de C. Las secuencias de escape con barra invertida, si están presentes, se descodifican como sigue:
    \a  alerta (campana)
    \b  espacio-atrás
    \e  un carácter de escape (ESC)
    \f  nueva página
    \n  nueva linea
    \r  retorno de carro
    \t  tabulación horizontal
    \v  tabulación vertical
    \\  barra invertida
    \nnn
        el carácter cuyo código es el valor octal nnn (de uno a tres dígitos)
    \xnnn
        el carácter cuyo código es el valor hexadecimal nnn

El resultado traducido es entrecomillado con comillas simples, como si el signo de dólar no hubiera estado presente.

Una cadena entre comillas dobles precedida por un signo de dólar ($) hará que la cadena se traduzca según la localización en curso. Si ésta es C o POSIX, el signo de dólar no se tiene en cuenta. Si la cadena se traduce y reemplaza, el reemplazo se entrecomilla con comillas dobles.

PARÁMETROS
Un parámetro es una entidad que almacena valores. Puede ser un nombre, un número, o uno de los caracteres especiales listados a continuación bajo el epígrafe Parámetros especiales. En lo que se refiere al shell, una variable es un parámetro identificado por un nombre.

Un parámetro está definido si se le ha asignado un valor. La cadena vacía es un valor válido. Una vez que una variable está definida, sólo puede quitarse de la lista de variables mediante la orden interna unset (vea ÓRDENES INTERNAS DEL SHELL más adelante).

A una variable se le puede asignar un valor mediante una sentencia de la forma

    nombre=[valor]

Si no se da el valor, a la variable se asigna la cadena vacía. Todos los valores están sujetos a expansión de tilde, de parámetros y variables, de cadena, de orden, aritmética, y eliminación de comillas (vea EXPANSIÓN más abajo). Si la variable tiene activado su atributo integer (vea declare más abajo en ÓRDENES INTERNAS DEL SHELL) entonces valor está sujeto a expansión aritmética incluso si no se emplea la expansión $((...)) (vea Expansión aritmética más adelante). No se realiza la división de palabras, con la excepción de "$@" como se explica más adelante bajo el epígrafe Parámetros especiales. La expansión de nombres de camino no se efectúa.

  Parámetros posicionales

Un parámetro posicional es un parámetro denotado por uno o más dígitos, distintos del simple 0. Los parámetros posicionales se asignan a partir de los argumentos del shell cuando éste es llamado, y pueden ser reasignados mediante la orden interna set. Los parámetros posicionales no pueden ser asignados con sentencias de asignación. Los parámetros posicionales se reemplazan temporalmente cuando se ejecuta una función del shell (vea FUNCIONES abajo).

Cuando un parámetro posicional consistente en más de un solo dígito se expande, debe rodearse por llaves (vea EXPANSIÓN abajo).

  Parámetros especiales

El shell trata de forma especial a ciertos parámetros. Éstos sólo pueden referenciarse; no se permite asignarles nada.
*   Se expande a los parámetros posicionales, empezando por 1. Cuando la expansión ocurre entre comillas dobles, se expande a una sola palabra con el valor de cada parámetro separado por el primer carácter de la variable especial IFS. Esto es, "$*" es equivalente a "$1c$2c...", donde c es el primer carácter del valor de la variable IFS. Si IFS no está definida, los parámetros se separan por espacios. Si IFS es la cadena vacía, los parámetros se juntan sin ningún separador.
@   Se expande a los parámetros posicionales, empezando desde 1. Cuando la expansión ocurre dentro de comillas dobles, cada parámetro se expande a una palabra separada. Esto es, "$@" es equivalente a "$1" "$2" ... Cuando no hay parámetros posicionales, "$@" y $@ se expanden a nada (esto es, se borran).
#   Se expande al número en base 10 de parámetros posicionales.
?   Se expande al estado de la tubería más recientemente ejecutada en primer plano.
-   Se expande a las opciones del shell activas actualmente según se hayan especificado en la llamada, mediante la orden interna set, o las que haya puesto el mismo shell (como la opción -i).
$   Se expande al PID del shell. En un subshell (), se expande al PID del shell actual, no al del subshell.
!   Se expande al PID de la orden más recientemente ejecutada en segundo plano (asíncronamente).
0   Se expande al nombre del shell o guión del shell. Este parámetro se pone en el inicio del shell. Si bash se llama con un fichero de órdenes, $0 se pone al nombre de ese fichero. Si bash se arranca con la opción -c, entonces $0 se pone al primer argumento tras la cadena que se va a ejecutar, si hay alguno presente. Si no, se pone al nombre de fichero empleado para llamar a bash, como se da en el argumento cero.
_   En el arranque del shell, se pone al nombre absoluto de fichero del shell o guión del shell que se está ejecutando, tal como se ha pasado en la lista de argumentos. Subsecuentemente, se expande al último argumento de la orden anterior, tras la expansión. También se pone al nombre completo del fichero de cada orden ejecutada, y se pone en el entorno exportado a esa orden. Cuando se está comprobando si hay correo nuevo, este parámetro contiene el nombre del fichero de correo o buzón que se está comprobando actualmente.

  Variables del shell

El shell pone automáticamente las siguientes variables:

PPID
    El PID del proceso padre del shell. Esta variable es de lectura exclusiva.
PWD El directorio de trabajo actual como lo pone la orden cd.
OLDPWD
    El directorio de trabajo anterior como lo puso la orden cd.
REPLY
    La línea de entrada leída por la orden interna read cuando no se le dan argumentos.
UID Se expande al UID del usuario en curso, puesta en el arranque del shell. Esta variable es de lectura exclusiva.
EUID
    Se expande al UID efectivo del usuario en curso, puesta en el arranque del shell. Esta variable es de lectura exclusiva.
GROUPS
    Una variable vector conteniendo la lista de grupos de los que el usuario actual es miembro. Esta variable es de lectura exclusiva.
BASH
    Se expande al nombre completo del fichero empleado para llamar a esta instancia de bash.
BASH_VERSION
    Se expande a una cadena que describe la versión de esta instancia de bash.
BASH_VERSINFO
    Una variable vector de lectura exclusiva cuyos miembros contienen información de versión para esta instancia de bash. Los valores asignados a los miembros del vector son como sigue:

    BASH_VERSINFO[0]
        El número mayor de versión (la distribución).
    BASH_VERSINFO[1]
        El número menor de versión (la versión).
    BASH_VERSINFO[2]
        El nivel de parcheo.
    BASH_VERSINFO[3]
        La versión de construcción.
    BASH_VERSINFO[4]
        El estado de la distribución (por ejemplo, beta1).
    BASH_VERSINFO[5]
        El valor de MACHTYPE.

SHLVL
    Se incrementa en uno cada vez que se arranca una nueva instancia de bash.

RANDOM
    Cada vez que este parámetro sea referenciado, se genera un entero aleatorio entre 0 y 32767. La secuencia de números aleatorios puede iniciarse asignando un valor a RANDOM. Si RANDOM no está definido, pierde sus propiedades especiales, incluso si posteriormente es redefinido.

SECONDS
    Cada vez que este parámetro es referenciado, se devuelve en él el número de segundos transcurridos desde la llamada al shell. Si se asigna un valor a SECONDS, el valor devuelto en posteriores referencias es el número de segundos desde la asignación más el valor asignado. Si SECONDS no está definido, pierde sus propiedades especiales, incluso si posteriormente es redefinido.

LINENO
    Cada vez que este parámetro es referenciado, el shell sustituye un número en base 10 representando el número de línea secuencial actual (empezando por 1) dentro de un guión o función. Si no estamos en un guión o función, no se garantiza que el valor sustituido tenga significado. Si LINENO no está definido, pierde sus propiedades especiales, incluso si posteriormente es redefinido.

HISTCMD
    El número de "historia", o índice en la lista "histórica", de la orden actual. Si HISTCMD no está definido, pierde sus propiedades especiales, incluso si posteriormente es redefinido.

DIRSTACK
    Una variable vector (vea Vectores más abajo) que aloja los contenidos actuales de la pila de directorios. Los directorios aparecen en la pila en el orden en el que se muestran con la orden interna dirs. La asignación a miembros de este vector puede emplearse para modificar directorios que ya estén en la pila, pero entonces deben utilizarse las órdenes internas pushd y popd para añadir y quitar directorios. La asignación a esta variable no cambiará el directorio de trabajo. Si DIRSTACK no está definido, pierde sus propiedades especiales, incluso si posteriormente es redefinido.

PIPESTATUS
    Una variable vector (vea Vectores más abajo) que contiene una lista de valores de estado de salida de los procesos en la tubería en primer plano ejecutada más recientemente (que puede contener una sola orden).

OPTARG
    El valor del último argumento que es una opción procesado por la orden interna getopts (vea ÓRDENES INTERNAS DEL SHELL más abajo).

OPTIND
    El índice del siguiente argumento a ser procesado por la orden interna getopts (vea ÓRDENES INTERNAS DEL SHELL más abajo).

HOSTNAME
    Puesto automáticamente al nombre del anfitrión (computador) actual.

HOSTTYPE
    Puesto automáticamente a una cadena que describe de forma unívoca el tipo de máquina en la que bash se está ejecutando. El valor predefinido depende del sistema.

OSTYPE
    Puesto automáticamente a una cadena que describe el sistema operativo en el que bash se está ejecutando. El valor predefinido depende del sistema. En Linux es "linux".

MACHTYPE
    Puesto automáticamente a una cadena que describe completamente el tipo de sistema en el que bash se está ejecutando, en el formato estándar de GNU cpu-compañía-sistema. El valor predefinido depende del sistema.

SHELLOPTS
    Una lista, de elementos separados por dos puntos, de opciones activas del shell. Cada palabra en la lista es un argumento válido para la opción -o de la orden interna set (vea ÓRDENES INTERNAS DEL SHELL abajo). Las opciones que aparecen en SHELLOPTS son aquéllas que aparecen como on en set -o. Si esta variable está en el ambiente cuando bash empieza, cada opción del shell en la lista se activará antes de leer cualquier fichero de inicio. Esta variable es de lectura exclusiva.

El shell hace uso de las siguientes variables. En algunos casos, bash asigna un valor predeterminado a una variable; estos casos se dicen abajo.

IFS El Separador Interno de Campo que se emplea para la división de palabras tras la expansión y para dividir líneas en palabras con la orden interna read. El valor predeterminado es ``<espacio><tab><nueva-línea>''.
PATH
    El camino de búsqueda para órdenes, programas ejecutables. Es una lista de directorios separados por dos puntos en los cuales el shell busca órdenes (vea EJECUCIÓN DE ÓRDENES más abajo). El camino predeterminado depende del sistema, y lo pone el administrador que instala bash. Un valor común es ``/usr/local/bin:/bin:/usr/bin:.''.
HOME
    El directorio inicial de trabajo del usuario en curso; el argumento predeterminado para la orden interna cd. El valor de esta variable se usa también cuando se realiza la expansión de tilde.
CDPATH
    El camino de búsqueda para la orden cd. Es una lista de directorios separados por dos puntos en los cuales el shell busca directorios destino especificados por la orden cd. Un valor de muestra es ``.:~:/usr''.
BASH_ENV
    Si este parámetro está definido cuando bash está ejecutando un guión del shell, su valor se interpreta como un nombre de fichero que contiene órdenes para iniciar el shell, como en ~/.bashrc. El valor de BASH_ENV está sujeto a expansión de parámetros, sustitución de órdenes y expansión aritmética, antes de ser interpretado como un nombre de fichero. PATH no se usa para buscar el nombre de fichero resultante.
MAIL
    Si este parámetro está puesto a un nombre de fichero y la variable MAILPATH no está definida, bash informa al usuario de la llegada de correo en el fichero especificado.
MAILCHECK
    Especifica cuán a menudo (en segundos) bash comprueba si hay correo nuevo. El valor predeterminado es 60 s. Cuando es tiempo de comprobar si hay correo, el shell lo hace antes de mostrar el indicador primario. Si esta variable no está definida, el shell no comprueba si hay correo nuevo.
MAILPATH
    Una lista de nombres de fichero separados por dos puntos donde hay que comprobar si hay correo nuevo. El mensaje que haya que mostrar cuando llegue correo a un fichero particular puede especificarse separando el nombre de fichero del mensaje con un '?'. Cuando se use en el texto del mensaje, $_ se expande al nombre del fichero de correo en curso. Ejemplo:
    MAILPATH='/var/spool/mail/bfox?"Tienes carta":~/shell-mail?"¡$_ tiene carta!"'
    Bash proporciona un valor predeterminado para esta variable, pero la localización de los ficheros de correo del usuario que emplea es dependiente del sistema (e.g., /var/spool/mail/$USER).
PS1 El valor de este parámetro se expande (vea INDICADORES abajo) y se emplea como la cadena del indicador primario. El valor predeterminado es ``\s-\v\$ ''.
PS2 El valor de este parámetro se expande como con PS1 y se emplea como la cadena del indicador secundario. El valor predeterminado es ``> ''.
PS3 El valor de este parámetro se emplea como el indicador para la orden select (vea GRAMÁTICA DEL SHELL más arriba).
PS4 El valor de este parámetro se expande como con PS1 y el valor se imprime antes de cada orden que bash muestra durante una traza de ejecución. El primer carácter de PS4 se replica múltiples veces, tantas como sean necesarias, para indicar múltiples niveles de indirección. El valor predeterminado es ``+ ''.
TIMEFORMAT
    El valor de este parámetro se emplea como una cadena de formato para especificar cómo debe mostrarse la información de tiempos para tuberías precedidas por la palabra reservada time. El carácter % introduce una secuencia de escape que se expande a un valor de tiempo o a otra información. Las secuencias de escape y sus significados son como sigue; los corchetes denotan partes opcionales.

    %%  Un % literal.
    %[p][l]R
        El tiempo total transcurrido en segundos.
    %[p][l]U
        El número de segundos de CPU gastados en modo usuario.
    %[p][l]S
        El número de segundos de CPU gastados en modo sistema.
    %P  El porcentaje de CPU, computado como (%U + %S) ÷ %R.

    La p opcional es un dígito que especifica la precisión, el número de decimales. Un valor de 0 hace que no se muestre ningún decimal, ni el punto o coma decimal. Como mucho se pueden especificar tres decimales; valores de p mayores de 3 se cambian a 3. Si p no se especifica, se usa precisamente el valor 3.

    La l opcional especifica un formato más largo, incluyendo minutos, en la forma MMmSS.FFs. El valor de p determina si se incluye o no la fracción.

    Si esta variable no está definida, bash actúa como si tuviera el valor $'\nreal\t%3lR\nuser\t%3lU\nsys %3lS'. Si el valor es nulo, no se muestra ninguna información de tiempos. Se añade un salto de línea al final cuando se muestra la cadena de formato.

HISTSIZE
    El número de órdenes a recordar en la historia de órdenes (vea HISTORIA abajo). El valor predeterminado es 500.

HISTFILE
    El nombre del fichero en el que se guarda la historia de órdenes (vea HISTORIA abajo). El valor predeterminado es ~/.bash_history. Si no está definido, no se guarda la historia de órdenes cuando se acaba un shell interactivo.

HISTFILESIZE
    El número máximo de líneas contenidas en el fichero de historia. Cuando se asigna un valor a esta variable, el fichero de historia se trunca, si es menester, para contener no más de ese número de líneas. El valor predeterminado es 500. El fichero de historia se trunca también a este tamaño tras escribir en él cuando un shell interactivo termina.

OPTERR
    Si se pone al valor 1, bash muestra mensajes de error generados por la orden interna getopts (vea ÓRDENES INTERNAS DEL SHELL abajo). OPTERR se inicia a 1 cada vez que se llama al shell o cuando se ejecuta un guión del shell.

LANG
    Empleado para determinar la categoría de localización ("escenario") para cualquier categoría no seleccionada específicamente con una variable de las que empiezan por LC_.

LC_ALL
    Esta variable tiene preferencia sobre el valor de LANG y de cualquier otra variable de las que empiecen por LC_ especificando una categoría de localización.

LC_COLLATE
    Esta variable determina el orden de clasificación empleado cuando se ordene el resultado de una expansión de nombres de caminos, y determina el comportamiento de expresiones de rango, clases de equivalencia, y secuencias de clasificación dentro de expansiones de nombres de caminos y concordancia de patrones.

LC_CTYPE
    Esta variable determina la interpretación de caracteres y el comportamiento de clases de caracteres dentro de expansiones de nombres de caminos y concordancia de patrones.

LC_MESSAGES
    Esta variable determina la localización empleada para traducir cadenas entrecomilladas con comillas dobles precedidas por un $.

PROMPT_COMMAND
    Si está definido, el valor se ejecuta como una orden antes de mostrarse cada indicador primario.

IGNOREEOF
    Controla la acción de un shell interactivo al recibir un carácter EOF como sola entrada. Si está definido, el valor es el número de caracteres EOF consecutivos que deben teclearse como los primeros caracteres de una línea de entrada antes de que bash acabe. Si la variable existe pero no tiene un valor numérico, o ninguno, el valor predeterminado es 10. Si no existe, EOF significa el final de la entrada para el shell.

TMOUT
    Si se define a un valor mayor que cero, el valor se interpreta como el número de segundos que hay que esperar una entrada después de mostrarse el indicador primario. Bash termina después de esperar ese número de segundos si no recibe ninguna entrada.

FCEDIT
    El editor predeterminado para la orden interna fc.

FIGNORE
    Una lista de sufijos separados por dos puntos que no hay que tener en cuenta cuando se realice una terminación de nombres de ficheros (vea READLINE abajo). Un nombre de fichero cuyo sufijo concuerde con una de las entradas en FIGNORE se excluye de la lista de nombres de ficheros a completar. Un valor de muestra es ``.o:~''.

GLOBIGNORE
    Una lista de patrones separados por dos puntos que definen en conjunto de nombres de ficheros que no hay que tener en cuenta en la expansión de nombres de caminos. Si un nombre de fichero que concordaba en un patrón de expansión de nombres de caminos también concuerda con uno de los patrones en GLOBIGNORE, se quita de la lista de concordancias.

INPUTRC
    El nombre de fichero para el de inicio de readline, en vez del predeterminado (vea READLINE abajo).

HISTCONTROL
    Si se define a un valor de ignorespace, las líneas que comiencen con un carácter espacio no se meten en la lista de historia. Si se pone a un valor de ignoredups, las líneas que concuerden con la última línea de la historia, no se meten. Un valor de ignoreboth combina las dos opciones. Si no está definido, o si lo está a otro valor distinto de los de antes, todas las líneas leídas por el analizador léxico se guardan en la lista de la historia, sujeto esto al valor de HISTIGNORE. La función de esta variable ha sido tomada por HISTIGNORE. La segunda línea y siguientes de una orden compuesta multi-línea no se comprueban, y se añaden a la historia sin importar el valor de HISTCONTROL.

HISTIGNORE
    Una lista de patrones separados por dos puntos empleados para decidir qué líneas de órdenes deben guardarse en la lista de historia. Cada patrón se ancla al principio de la línea y debe especificar la línea completamente (no se añade ningún `*'). Cada patrón se comprueba con la línea tras aplicarse las comprobaciones especificadas por HISTCONTROL. Además de los caracteres normales de concordancia de patrones del shell, `&' concuerda con la línea de historia anterior. `&' puede protegerse empleando una barra inversa. Ésta se quita antes de intentarse una concordancia. La segunda línea y siguientes de una orden compuesta multi-línea no se comprueban, y se añaden a la historia sin importar el valor de HISTIGNORE.

histchars
    Los dos o tres caracteres que controlan la expansión y separación en lexemas de la historia (vea EXPANSIÓN DE HISTORIA abajo). El primer carácter es el carácter de expansión de historia, el carácter que señala el comienzo de una expansión de historia, normalmente `!'. El segundo carácter es el carácter de sustitución rápida, que se usa como una abreviatura para reejecutar la orden anterior, sustituyendo una cadena por otra en la orden. El valor predeterminado es `^'. El tercer carácter, opcional, es el carácter que indica que el resto de la línea es un comentario cuando se encuentra como el primer carácter de una palabra, normalmente es `#'. El carácter de comentario de historia hace que la sustitución de historia se salte en el resto de palabras de la línea. No hace que necesariamente el analizador léxico del shell trate al resto de la línea como un a un comentario.

HOSTFILE
    Contiene el nombre de un fichero con el mismo formato que que debería leerse cuando el shell necesite completar un nombre de anfitrión (computador). El fichero puede ser cambiado interactivamente; la siguiente vez que se intente completar un nombre de computador, bash añade el contenido del nuevo fichero a la base de datos ya existente.

auto_resume
    Esta variable controla cómo el shell interactúa con el usuario para el control de trabajos. Si esta variable está definida, las órdenes simples de una palabra sin redirección se tratan como candidatas para reanudar un trabajo existente parado. No se permite ninguna ambigüedad; si hay más de un trabajo que empiece con la cadena tecleada, se selecciona el trabajo al que se ha accedido más recientemente. El nombre de un trabajo parado, en este contexto, es la línea de órdenes empleada para arrancarlo. Si se define al valor exact, la cadena suministrada debe concordar exactamente con el nombre de un trabajo parado; si se define como substring, la cadena suministrada necesita concordar con una subcadena del nombre de un trabajo parado. El valor substring proporciona una funcionalidad análoga a la del identificador de trabajo %? (vea CONTROL DE TRABAJOS adelante). Si se pone a cualquier otro valor, la cadena suministrada debe ser un prefijo del nombre de un trabajo parado; esto proporciona una funcionalidad análoga a la del identificador de trabajo %.

  Vectores
Bash proporciona variables vectores, monodimensionales. Cualquier variable puede usarse como un vector; la orden interna declare declarará un vector explícitamente. No hay un límite máximo en el tamaño de un vector, ni ningún requisito para que los miembros se indexen o asignen de forma contigua. Los vectores se indexan empleando enteros y su primer elemento es el de índice cero, como en C.

Un vector se crea automáticamente si se asigna algo a una variable con la sintaxis nombre[índice]=valor. El índice se trata como una expresión aritmética que debe evaluarse a un número mayor o igual a cero. Para declarar un vector explícitamente, emplee declare -a nombre (vea ÓRDENES INTERNAS DEL SHELL abajo). También se acepta declare -a nombre[índice], donde el índice no se tiene en cuenta. Se pueden especificar atributos para una variable vector mediante las órdenes internas declare y readonly. Cada atributo se aplica a cada uno de los miembros del vector.

Se asignan valores a los vectores mediante asignaciones compuestas de la forma nombre=(valor1 ... valorn), donde cada valor es de la forma [índice]=cadena. Sólo cadena es necesario. Si se suministra el índice entre corchetes y la asignación, se asigna a ese índice; si no, el índice del elemento asignado es el último índice al que la sentencia le asignó algo, más uno. Los índices empiezan en cero. Esta sintaxis también la acepta la orden interna declare. Se puede asignar a los elementos individuales del vector empleando la sintaxis nombre[índice]=valor, ya presentada antes.

Cualquier elemento de un vector puede referenciarse mediante ${nombre[índice]}. Las llaves son necesarias para evitar conflictos con la expansión de nombres de caminos. Si índice es @ o *, la palabra se expande a todos los miembros de nombre. Estos índices difieren solamente cuando la palabra aparece entre comillas dobles. Si la palabra está entre comillas dobles, ${nombre[*]} se expande a una sola palabra con el valor de cada miembro del vector separados por el primer carácter de la variable especial IFS, y ${nombre[@]} expande cada elemento de nombre a una palabra separada. Cuando no hay miembros del vector, ${nombre[@]} se expande a nada. Esto es análogo a la expansión de los parámetros especiales * y @ (vea Parámetros especiales arriba). ${#nombre[índice]} se expande a la longitud de ${nombre[índice]}. Si índice es * o @, la expansión es el número de elementos del vector. Referenciar una variable vector sin índice es equivalente a referenciar el elemento cero.

La orden interna unset se emplea para destruir vectores. unset nombre[índice] destruye el elemento del vector con el índice especificado. unset nombre, donde nombre es un vector, o unset nombre[índice], donde índice es * o @, borra el vector entero.

Las órdenes internas declare, local, y readonly aceptan cada una una opción -a para especificar un vector (array). La orden interna read acepta una -a para asignar una lista de palabras leídas desde la entrada estándar a un vector. Las órdenes internas set y declare muestran valores de un vector en una manera tal que les permite ser reutilizadas como asignaciones.

EXPANSIÓN
La expansión se realiza en la línea de órdenes una vez que la orden ha sido dividida en palabras. Hay siete clases de expansión: expansión de llaves, expansión de tilde, expansión de parámetro y variable, sustitución de orden, expansión aritmética, división de palabras, expansión de nombre de camino.

La orden de las expansiones es: expansión de llaves, de tilde, de parámetro, variable y aritmética, y sustitución de orden (hechas de izquierda a derecha), división de palabras, y expansión de nombre de camino.

En sistemas que puedan admitirla, hay una expansión adicional disponible: sustitución de proceso.

Sólo la expansión de llaves, división de palabras, y expansión de nombre de camino, pueden cambiar el número de palabras de la expansión; las otras expanden una palabra simple a otra palabra simple. Las únicas excepciones a esto son las expansiones de "$@" y "${nombre[@]}" como se ha explicado más arriba (vea PARÁMETROS).

  Expansión de llaves

La expansión de llaves es un mecanismo por el cual pueden generarse cadenas arbitrarias. Este mecanismo es similar a la expansión de nombre de camino, pero los nombres de ficheros no necesitan existir. Los patrones a ser expandidos con la expansión de llaves toman la forma de un preámbulo opcional seguido por una serie de cadenas separadas por comas entre un par de llaves, seguido por un post scriptum opcional. El preámbulo sirve de prefijo a cada cadena de entre las llaves, y el post scriptum se añade luego a cada cadena resultante, expandiendo de izquierda a derecha.

Las expansiones de llaves pueden anidarse. Los resultados de cada cadena expandida no se ordenan; se preserva el orden de izquierda a derecha. Por ejemplo, a{d,c,b}e se expande a `ade ace abe'.

La expansión de llaves se realiza antes que cualquier otra, y cualquier carácter especial para otras expansiones se preserva en el resultado. Es estrictamente textual. Bash no aplica ninguna interpretación sintáctica al contexto de la expansión ni al texto entre las llaves.

Una expansión de llaves correctamente formada debe contener llaves de apertura y cierre sin entrecomillar, y por lo menos una coma sin entrecomillar. Cualquier expansión de llaves formada incorrectamente se deja tal cual. Una { o , puede protegerse con una barra invertida para evitar que sea considerada como parte de una expansión de llaves.

Esta construcción se emplea normalmente como una abreviatura cuando el prefijo común de las cadenas a generar es mayor que en el ejemplo de antes:

    mkdir /usr/local/src/bash/{old,new,dist,bugs}
o
    chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

La expansión de llaves introduce una pequeña incompatibilidad con versiones históricas de sh. sh no trata especialmente a las llaves de apertura o cierre cuando aparecen como parte de una palabra, y las deja en la entrada. Bash quita las llaves de palabras, como una consecuencia de la expansión de llaves. Por ejemplo, una palabra introducida a sh como fichero{1,2} aparece así mismo en la entrada. La misma palabra se muestra como fichero1 fichero2 tras la expansión hecha por bash. Si se desea una compatibilidad estricta con sh, arranque bash con la opción +B o inhabilite la expansión de llaves con la opción +B de la orden interna set (vea ÓRDENES INTERNAS DEL SHELL abajo).

  Expansión de tilde

Si una palabra comienza con un carácter tilde de la ñ sin entrecomillar (`~'), todos los caracteres que precedan a la primera barra inclinada sin entrecomillar (o todos los caracteres, si no hay ninguna barra inclinada sin proteger), se consideran un prefijo-tilde. Si ninguno de los caracteres en el prefijo-tilde están protegidos, los caracteres en el prefijo-tilde que siguen a la tilde se tratan como un posible nombre de entrada de usuario (login). Si este nombre de entrada es la cadena vacía, la tilde se reemplaza con el valor del parámetro del shell HOME. Si HOME no está definida, se sustituye en su lugar el directorio de trabajo inicial del usuario que está ejecutando el shell. De otra forma, el prefijo-tilde se reemplaza con el directorio de trabajo inicial (de casa) asociado con el nombre de entrada especificado.

Si el prefijo-tilde es un `~+', el valor de la variable del shell PWD reemplaza al prefijo-tilde. Si el prefijo-tilde es un `~-', el valor de la variable del shell OLDPWD, si está definido, se sustituye. Si los caracteres que siguen a la tilde en el prefijo-tilde consisten en un número N, prefijado opcionalmente por un `+' o un `-', el prefijo-tilde se reemplaza con el elemento correspondiente de la pila de directorios, como lo mostraría la orden interna dirs llamada con el prefijo-tilde como argumento. Si los caracteres tras la tilde en el prefijo-tilde consisten en un número sin un `+' ni `-' iniciales, se supone `+'.

Si el nombre de entrada es inválido, o si la expansión de tilde falla, la palabra se deja tal cual.

A cada asignación de variable se comprueba si hay prefijos-tilde sin entrecomillar inmediatamente tras un : o un =. En estos casos, la expansión de tilde también tiene lugar. Consecuentemente, uno puede usar nombres de ficheros con tildes en asignaciones a PATH, MAILPATH, y CDPATH, y el shell asigna el valor expandido.

  Expansión de parámetro

El carácter `$' introduce la expansión de parámetro, sustitución de orden, o expansión aritmética. El nombre de parámetro o símbolo a ser expandido puede estar encerrado entre llaves, que son opcionales pero sirven para proteger a la variable en la expansión de caracteres que la sigan y puedan interpretarse como parte de su nombre.

Cuando se empleen llaves, la de cierre es la primera `}' no protegida con una barra invertida o en una cadena entrecomillada, y no dentro de una expansión aritmética empotrada, sustitución de orden, o expansión de parámetro.

${parámetro}
    Se sustituye el valor de parámetro. Se requieren llaves cuando parámetro es un parámetro posicional de más de un dígito, o cuando parámetro viene seguido por un carácter que no debe interpretarse como parte de su nombre.

Si el primer carácter de parámetro es un signo de cierre de exclamación, se introduce un nivel de indirección de variable. Bash emplea el valor de la variable formada a partir del resto de parámetro como el nombre de la variable; luego, esta variable se expande y ese valor se emplea en el resto de la sustitución, en vez del propio valor de parámetro. Esto se conoce como expansión indirecta.

En cada uno de los casos anteriores, palabra está sujeta a expansión de tilde, expansión de parámetro, sustitución de orden, y expansión aritmética. Cuando no se realiza la expansión de subcadena, bash comprueba si un parámetro está sin definir o es nulo; si omitimos los dos puntos la comprobación sólo es para la no definición del parámetro.

${parámetro:-palabra}
    Emplear valores predeterminados. Si parámetro no está definido o está vacío, se sustituye la expansión de palabra. De otro modo, se sustituye el valor de parámetro.
${parámetro:=palabra}
    Asignar valores predeterminados. Si parámetro no está definido o es nulo, la expansión de palabra se asigna a parámetro. Luego, el valor de parámetro se sustituye. No se puede asignar nada de esta manera a los parámetros posicionales ni a los especiales.
${parámetro:?palabra}
    Muestra un error si no está definido o está vacío. Si parámetro es nulo o no está definido, la expansión de palabra (o un mensaje a tal efecto si palabra no está presente) se escribe en la salida estándar de errores y el shell, si no es interactivo, acaba. De otra manera, se sustituye el valor de parámetro.
${parámetro:+palabra}
    Emplear un valor alternativo. Si parámetro está vacío o no está definido, no se sustituye nada; de otro modo, se sustituye la expansión de palabra.
${parámetro:desplazamiento}
${parámetro:desplazamiento:longitud}
    Expansión de subcadena. Expande hasta longitud caracteres de parámetro, empezando en los caracteres especificados por desplazamiento. Si se omite la longitud, se expande a la subcadena de parámetro, empezando en el carácter especificado por desplazamiento. longitud y desplazamiento son expresiones aritméticas (vea EVALUACIÓN ARITMÉTICA más abajo). longitud debe evaluarse a un número mayor o igual a cero. Si desplazamiento se evalúa a un número menor que cero, el valor se emplea como un desplazamiento desde el final del valor de parámetro. Si parámetro es @, el resultado es longitud parámetros posicionales empezando en desplazamiento. Si parámetro es un nombre de vector indexado por @ o *, el resultado es longitud miembros del vector empezando con ${parámetro[desplazamiento]}. La indexación de la subcadena empieza por cero a menos que se empleen los parámetros posicionales, en cuyo caso empieza por 1.

${#parámetro}
    Se sustituye la longitud en caracteres del valor de parámetro. Si parámetro es * o @, el valor sustituido es el número de parámetros posicionales. Si parámetro es un nombre de vector indexado por * o @, el valor sustituido es el número de elementos en el vector.

${parámetro#palabra}
${parámetro##palabra}
    La palabra se expande para producir un patrón lo mismo que en una expansión de nombre de camino. Si el patrón concuerda con el principio del valor de parámetro, entonces el resultado de la expansión es el valor expandido de parámetro con el patrón más corto que concuerde (el caso ``#) o con el patrón más largo que concuerde (el caso ``##'') eliminado. Si parámetro es @ o *, la operación de borrado del patrón se aplica a cada parámetro posicional por turnos, y la expansión es la lista resultante. Si parámetro es una variable vector indexada con @ o *, la operación de borrado del patrón se aplica a cada miembro del vector por orden, y la expansión es la lista resultante.

${parámetro%palabra}
${parámetro%%palabra}
    La palabra se expande para producir un patrón justo como en la expansión de nombre de camino. Si el patrón concuerda con una porción del final del valor expandido de parámetro, entonces el resultado de la expansión es el valor expandido de parámetro con el patrón más corto que concuerde (el caso ``%'') o el más largo (el caso ``%%'') borrado. Si parámetro es @ o *, la operación de borrado del patrón se aplica a cada parámetro posicional por orden, y la expansión es la lista resultante. Si parámetro es una variable vector indexada por @ o *, la operación de borrado del patrón se aplica a cada miembro del vector por orden, y la expansión es la lista resultante.

${parámetro/patrón/cadena}
${parámetro//patrón/cadena}
    El patrón se expande para producir un patrón justo como en la expansión de nombre de camino. parámetro se expande y la concordancia más larga de patrón contra este valor se reemplaza por cadena. En la primera forma, sólo se reemplaza la primera concordancia. La segunda forma hace que todas las concordancias de patrón se reemplacen con cadena. Si patrón empieza por #, debe concordar con el principio de la cadena. Si patrón empieza por %, debe concordar con el final de la cadena. Si cadena está vacía, las concordancias de patrón se borran y el / que sigue al patrón puede omitirse. Si parámetro es @ o *, la operación de sustitución se aplica a cada parámetro posicional por orden, y la expansión es la lista resultante. Si parámetro es una variable vector indexada por @ o *, la operación de sustitución se aplica a cada miembro del vector por orden, y la expansión es la lista resultante.

  Sustitución de orden

La sustitución de orden permite a la salida de una orden reemplazar al nombre de la orden. Hay dos formas:

    $(orden)
u
    `orden`

Bash realiza la expansión ejecutando orden y reemplazando la sustitución de orden con la salida estándar de la orden, quitando los saltos de línea finales. Los saltos de línea empotrados no se borran, pero pueden ser eliminados durante la división de palabras. La sustitución de orden $(cat fichero) puede reemplazarse por lo equivalente pero más rápido $(< fichero).

Cuando se emplea la forma de sustitución al viejo estilo con las comillas inversas, la barra invertida mantiene su significado literal excepto cuando es seguida por $, `, o \. La primera comilla inversa no precedida por una barra invertida termina la sustitución de orden. Cuando se emplea la forma $(orden), todos los caracteres entre los paréntesis forman parte de la orden; ninguno se trata especialmente.

Las sustituciones de orden pueden anidarse. Para anidar cuando se emplee la forma de comillas inversas, proteja las comillas inversas internas con barras inversas.

Si la sustitución aparece dentro de las dobles comillas, la división de palabras y la expansión de nombres no se realiza en los resultados.

  Expansión aritmética

La expansión aritmética permite la evaluación de una expresión aritmética y la sustitución del resultado. El formato para la expansión aritmética es:

    $((expresión))

La expresión se trata como si estuviera entre comillas dobles, pero un signo de doble comilla dentro de los paréntesis no se trata especialmente. Todos los lexemas en la expresión están sujetos a expansión de parámetro, expansión de cadena, sustitución de orden, y eliminación de comillas. Las sustituciones aritméticas pueden anidarse.

La evaluación se realiza de acuerdo a las reglas listadas más abajo en EVALUACIÓN ARITMÉTICA. Si expresión no es válida, bash imprime un mensaje indicando el fallo y no ocurre ninguna sustitución.

  Sustitución de proceso

La sustitución de proceso se admite en sistemas que acepten tuberías con nombre (FIFOs) o el método /dev/fd de nombrar ficheros abiertos. Toma una de las formas siguientes: <(lista) o >(lista). El proceso lista se ejecuta con su entrada o salida conectada a un FIFO o a algún fichero en /dev/fd. El nombre de este fichero se pasa como argumento a la orden en curso como el resultado de la expansión. Si se emplea la forma >(lista), escribir en el fichero proporciona la entrada para lista. Si se emplea la forma <(lista), el fichero pasado como argumento deberá leerse para obtener la salida de lista.

Cuando esté disponible, se realiza la sustitución de proceso simultáneamente con la expansión de parámetro y variable, sustitución de orden y expansión aritmética.

  División de palabras

El shell examina los resultados de la expansión de parámetro, sustitución de orden y expansión aritmética que no ocurrieron dentro de comillas dobles para realizar la división de palabras.

El shell trata cada carácter de IFS como un delimitador, y divide los resultados de las otras expansiones en palabras separadas por estos caracteres. Si IFS no está definido, o su valor es exactamente <espacio><tab><nueva-línea>, el valor predeterminado, entonces cualquier secuencia de caracteres de IFS sirve para delimitar palabras. Si IFS tiene algún otro valor, entonces las secuencias de los caracteres blancos espacio y tabulador no se tienen en cuenta al principio y al final de la palabra, siempre que el carácter de espacio en blanco esté en el valor de IFS (un carácter de espacio en blanco de IFS). Cualquier carácter en IFS que no sea espacio en blanco de IFS, junto con cualquier carácter de espacio en blanco adyacente de IFS, delimita un campo. Una secuencia de caracteres de espacio en blanco de IFS también se trata como un delimitador. Si el valor de IFS es nulo, no se realiza la división de palabras.

Los argumentos nulos explícitos ("" o '') se mantienen. Los argumentos nulos no protegidos implícitos, resultantes de la expansión de parámetros que no tienen valores, se eliminan. Si un parámetro sin ningún valor se expande dentro de comillas dobles, el resultado es un argumento nulo, y es mantenido.

Observe que si no hay expansión, tampoco se realiza la división de palabras.

  Expansión de nombre de camino

Tras la división de palabras, a menos que la opción -f esté puesta, bash examina cada palabra buscando los caracteres *, ?, (, y [. Si uno de estos caracteres aparece, entonces la palabra se considera como un patrón, y se reemplaza por una lista ordenada alfabéticamente de nombres de ficheros que concuerden con el patrón. Si no se encuentran nombres de ficheros concordantes, y la opción del shell nullglob está deshabilitada, la palabra se deja tal cual. Si la opción nullglob está puesta, y no ha habido ninguna concordancia, la palabra se elimina. Si la opción del shell nocaseglob está puesta, la búsqueda de la concordancia se realiza sin importar si los caracteres alfabéticos son letras mayúsculas o minúsculas. Cuando un patrón se usa para expansión de nombre de camino, el carácter ``.'' al principio de un nombre o inmediatamente después de una barra inclinada debe concordar explícitamente, a menos que esté puesta la opción del shell dotglob. En la concordancia de un nombre de camino, el carácter de barra inclinada debe siempre coincidir explícitamente. En otros casos, el carácter ``.'' no se trata de forma especial. Vea la descripción de shopt más abajo en ÓRDENES INTERNAS DEL SHELL para una descripción de las opciones del shell nocaseglob, nullglob, y dotglob.

La variable del shell GLOBIGNORE puede utilizarse para restringir el conjunto de nombres de ficheros que concuerden con un patrón. Si GLOBIGNORE está definido, cada nombre de fichero concordante que también coincida con uno de los patrones en GLOBIGNORE se quita de la lista de concordancias. Los nombres de fichero ``.'' y ``..'' nunca son tenidos en cuenta, incluso cuando GLOBIGNORE esté puesto. Sin embargo, definir GLOBIGNORE tiene el efecto de activar la opción del shell dotglob, de modo que todos los otros nombres de fichero que comiencen con un ``.'' concordarán. Para obtener el comportamiento antiguo de no hacer caso de nombres de ficheros que comienzan con un ``.'', haga que ``.*'' sea uno de los patrones de GLOBIGNORE. La opción dotglob está deshabilitada cuando GLOBIGNORE no está definido.

Patrones

Cualquier carácter que aparezca en un patrón, aparte de los especiales descritos más adelante, concuerda consigo mismo. El carácter NUL no puede estar en un patrón. Los caracteres de patrón especiales deben protegerse si han de concordar literalmente consigo mismos.

Los caracteres de patrón especiales tienen los siguientes significados:

*   Concuerda con cualquier cadena de caracteres, incluida la cadena vacía.
?   Concuerda con un solo carácter cualquiera.
[...]
    Concuerda con uno de los caracteres entre corchetes. Un par de caracteres separados por un signo menos denota un rango; cualquier carácter léxicamente entre esos dos, incluidos, concuerda. Si el primer carácter tras el [ es un ! o un ^, entonces la concordancia es con cualquier carácter de los que no estén entre los corchetes. Un - puede representarse para la concordancia incluyéndolo como el primer o último carácter del conjunto. Un ] puede hacerse concordar incluyéndolo como el primer carácter del conjunto.

    Dentro de [ y ], se pueden especificar clases de caracteres mediante la sintaxis [:clase:], donde clase es una de las siguientes clases definidas en el estándar POSIX.2:
    alnum alpha ascii blank cntrl digit graph lower print punct space upper xdigit
    Una clase de caracteres concuerda con cualquier carácter que pertenezca a esa clase.

    Dentro de [ y ], una clase de equivalencia se puede especificar empleando la sintaxis [=c=], que concuerda con todos los caracteres con el mismo peso de clasificación (tal como lo defina la localización en curso) que el carácter c.

    Dentro de [ y ], la sintaxis [.símbolo.] concuerda con el símbolo de clasificación símbolo.

Si la opción del shell extglob se activa usando la orden interna shopt, se reconocen algunos operadores de patrones extendidos. En la siguiente descripción, una lista-patrón es una lista de uno o más patrones separados por un |. Se pueden formar patrones compuestos usando uno o más de los siguientes sub-patrones:

    ?(lista-patrón)
        Concuerda con ninguna o una ocurrencia de los patrones dados
    *(lista-patrón)
        Concuerda con ninguna o más ocurrencias de los patrones dados
    +(lista-patrón)
        Concuerda con una o más ocurrencias de los patrones dados
    @(lista-patrón)
        Concuerda exactamente con uno de los patrones dados
    !(lista-patrón)
        Concuerda con cualquier cosa excepto con uno de los patrones dados

  Eliminación de comillas

Tras las expansiones precedentes, todas las ocurrencias no entrecomilladas de los caracteres \, ', y " que no resulten de una de las expansiones anteriores, se eliminan.

REDIRECCIÓN
Antes de que se ejecute una orden, su entrada y salida pueden ser redirigidas usando una notación especial interpretada por el shell. La redirección también se puede emplear para abrir y cerrar ficheros en el entorno de ejecución del shell en curso. Los operadores de redirección siguientes pueden preceder o aparecer en cualquier sitio de una orden simple o pueden ir detrás de una orden. Las redirecciones se procesan en el orden en el que aparecen, de izquierda a derecha.

En las descripciones siguientes, si se omite el número del descriptor de fichero, y el primer carácter del operador de redirección es <, la redirección se refiere a la entrada estándar (descriptor de fichero 0). Si el primer carácter del operador de redirección es >, la redirección se refiere a la salida estándar (descriptor de fichero 1).

La palabra tras el operador de redirección en las descripciones siguientes, a menos que se diga otra cosa, está sujeta a la expansión de llaves, expansión de tilde, expansión de parámetro, sustitución de orden, expansión aritmética, eliminación de comillas, y expansión de nombre de camino. Si se expande a más de una palabra, bash informa de un error.

Observe que el orden de las redirecciones es significativo. Por ejemplo, la orden

    ls > listadir 2>&1

dirige la salida estándar normal y la de errores, ambas, al fichero listadir, mientras que la orden

    ls 2>&1 > listadir

dirige solamente la salida estándar al fichero listadir, porque la salida de errores estándar se ha duplicado como salida estándar antes de que ésta se redirigiera a listadir.

Un fallo en la apertura o creación de un fichero hace que la redirección fracase.

  Redirección de la entrada

La redirección de la entrada hace que el fichero cuyo nombre resulte de la expansión de palabra se abra para lectura en el descriptor de fichero n, o la entrada estándar (descriptor de fichero 0) si no se especificó n.

El formato general para la redirección de la entrada es:

    [n]<palabra

  Redirección de la salida

la redirección de la salida hace que el fichero cuyo nombre resulte de la expansión de palabra se abra para escritura en el descriptor de fichero n, o la salida estándar (descriptor de fichero 1) si n no se especificó. Si el fichero no existe se crea; si existe se trunca a longitud cero, se vacía.

El formato general para la redirección de la salida es:

    [n]>palabra

Si el operador de redirección es >, y la opción noclobber de la orden interna set ha sido activada, la redirección fallará si el nombre de fichero resultante de la expansión de palabra existiera y fuera un fichero regular. Si el operador de redirección es >|, o es > y la opción noclobber de la orden interna set no está activada, la redirección se intenta incluso si el fichero nombrado por palabra existe.

  Añadir a la salida redirigida

La redirección de la salida en esta forma hace que el fichero cuyo nombre resulte de la expansión de palabra se abra para añadir en el descriptor de fichero n, o la salida estándar (descriptor de fichero 1) si n no se especificó. Si el fichero no existe, se crea.

El formato general para añadir a la salida es:

    [n]>>palabra

  Redirección de la salida estándar normal y de errores

Bash permite que ambas salidas estándares, la normal (descriptor de fichero 1) y la de errores (descriptor de fichero 2) se redirijan hacia el fichero cuyo nombre sea la expansión de palabra con esta construcción.

hay dos formatos para la redirección de la salida estándar y la salida de errores:

    &>palabra
y
    >&palabra

De las dos formas, es preferible la primera. Ésta es semánticamente equivalente a

    >palabra 2>&1

  Documentos internos

Este tipo de redirección instruye al shell a leer la entrada desde la fuente en curso hasta que vea una línea que contenga solamente palabra (sin blancos detrás). Todas las líneas leídas hasta ese punto se emplean como la entrada estándar de una orden.

El formato de los documentos internos es como sigue:

    <<[-]palabra
    		       documento-interno
    delimitador

No se realiza la expansión de parámetro, sustitución de orden, expansión de nombre de camino ni expansión aritmética en palabra. Si cualquier carácter de palabra está entrecomillado, el delimitador es el resultado de la eliminación de comillas en palabra, y las líneas en el documento interno no se expanden. Si palabra no está entrecomillada, todas las líneas del documento interno están sujetas a expansión de parámetro, sustitución de orden y expansión aritmética. En el último caso, el par \<nueva-línea> no se tiene en cuenta, y debe emplearse \ para proteger los caracteres \, $, y `.

Si el operador de redirección es <<-, entonces se quitan de las líneas de la entrada todos los caracteres de tabulación iniciales, así como de la línea que contiene delimitador. Esto permite que los documentos internos dentro de guiones del shell se sangren de manera natural.

  Duplicación de descriptores de fichero

El operador de redirección

    [n]<&palabra

se emplea para duplicar descriptores de ficheros de entrada. Si palabra se expande a uno o más dígitos, el descriptor de fichero denotado por n se hace ser una copia de este descriptor de fichero. Si los dígitos en palabra no especifican un descriptor de fichero abierto para entrada, se produce un error de redirección. Si palabra se evalúa a -, el descriptor de fichero n se cierra. Si n no se especifica, se emplea la entrada estándar (descriptor de fichero 0).

El operador

    [n]>&palabra

se emplea similarmente para duplicar descriptores de ficheros de salida. Si n no se especificó, se emplea la salida estándar (descriptor de fichero 1). Si los dígitos en palabra no especifican un descriptor de fichero abierto para salida, se produce un error de redirección. Como un caso especial, si n se omite, y palabra no se expande a uno o más dígitos, se redirigen la salida estándar y la salida estándar de errores como se describió con anterioridad.

  Apertura de descriptores de ficheros para lectura y escritura

El operador de redirección

    [n]<>palabra

hace que el fichero cuyo nombres sea la expansión de palabra se abra para lectura y para escritura en el descriptor de fichero n, o en el descriptor de fichero 0 si no se especifica n. Si el fichero no existe, se crea.

ALIAS
Los alias permiten que una cadena se sustituya por una palabra cuando se emplee como la primera palabra de una orden simple. El shell mantiene una lista de alias que pueden ponerse y quitarse con las órdenes internas alias y unalias (vea ÓRDENES INTERNAS DEL SHELL abajo). Se mira a ver si la primera palabra de cada orden, si no está entrecomillada, tiene un alias. Si es así, cada palabra se reemplaza con el texto del alias. El nombre del alias y el texto de reemplazo pueden contener cualquier entrada válida para el shell, incluyendo los metacaracteres listados arriba, con la excepción de que el nombre del alias no puede contener un =. La primera palabra del texto de reemplazo se comprueba si es un alias, pero si es un alias idéntico al que se está expandiendo, no se expande una segunda vez. Esto significa que uno puede poner un alias ls a ls -F, por ejemplo, y bash no intenta expandir recursivamente el texto de reemplazo. Si el último carácter del valor del alias es un blanco, entonces la siguiente palabra de la orden que sigue al alias también se mira para la expansión de alias.

Los alias se crean y listan con la orden alias, y se quitan con la orden unalias.

No hay ningún mecanismo para poder usar argumentos en el texto de reemplazo. Si se necesitan, debería emplearse mejor una función del shell.

Los alias no se expanden cuando el shell no es interactivo, a menos que se haya puesto la opción expand_aliases mediante shopt (vea la descripción de shopt bajo ÓRDENES INTERNAS DEL SHELL abajo).

Las reglas que conciernen a la definición y uso de los alias son algo confusas. Bash siempre lee por lo menos una línea completa de entrada antes de ejecutar cualquiera de las órdenes de esa línea. Los alias se expanden cuando se lee una orden, no cuando se ejecuta. Por lo tanto, una definición de alias que aparezca en la misma línea que otra orden no tiene efecto hasta que se lea la siguiente línea de entrada. Las órdenes que sigan a la definición de alias en esa línea no se ven afectadas por el nuevo alias. Este comportamiento también hay que tenerlo en cuenta cuando se ejecutan funciones. Los alias se expanden cuando se lee una definición de función, no cuando la función se ejecuta, porque una definición de función es en sí misma una orden compuesta. Como consecuencia, los alias definidos en una función no están disponibles hasta después de que esa función se ejecute. Para asegurarse, ponga siempre las definiciones de alias en una línea separada, y no emplee la orden alias en órdenes compuestas.

Para casi cualquier propósito, los alias pueden sustituirse por funciones del shell.

FUNCIONES
Una función del shell, definida como se describió anteriormente bajo GRAMÁTICA DEL SHELL, guarda una serie de órdenes para una ejecución posterior. Las funciones se ejecutan en el contexto del shell en curso; no se crea ningún nuevo proceso para interpretarlas (en contraste con la ejecución de un guión del shell). Cuando una función se ejecuta, los argumentos de la función se convierten en los parámetros posicionales durante su ejecución. El parámetro especial # se actualiza para reflejar el cambio. El parámetro posicional 0 permanece intacto. Todos los demás aspectos del entorno de ejecución del shell son idénticos entre una función y quien la llama con la excepción de que la trampa DEBUG (vea la descripción de la orden interna trap bajo ÓRDENES INTERNAS DEL SHELL más adelante) no se hereda.

Variables locales a la función se pueden declarar con la orden interna local. Normalmente, las variables y sus valores se comparten entre la función y quien la llama, como variables globales.

Si se ejecuta la orden interna return en una función, éste se acaba y la ejecución se reanuda con la siguiente orden tras la llamada a la función. Cuando una función se completa, los valores de los parámetros posicionales y el parámetro especial # se restauran a los valores que tenían antes de la ejecución de la función.

Los nombres de función y sus definiciones pueden listarse con la opción -f de las órdenes internas declare o typeset. La opción -F de declare o typeset listará solamente los nombres de las funciones. Las funciones pueden exportarse de modo que los subshells las tengan definidas automáticamente con la opción -f de la orden interna export.

Las funciones pueden ser recursivas. No se impone ningún límite en el número de llamadas recursivas.

EVALUACIÓN ARITMÉTICA
El shell permite que se evalúen expresiones aritméticas, bajo ciertas circunstancias (vea la orden interna let y Expansión aritmética). La evaluación se hace con enteros largos sin comprobación de desbordamiento, aunque la división por 0 se atrapa y se señala como un error. La lista siguiente de operadores se agrupa en niveles de operadores de igual precedencia. Los niveles se listan en orden de precedencia decreciente.

- + menos y más unarios
! ~ negación lógica y de bits
**  exponenciación
* / %
    multiplicación, división, resto
+ - adición, sustracción
<< >>
    desplazamientos de bits a izquierda y derecha
<= >= < >
    comparación
== !=
    igualdad y desigualdad
&   Y de bits (AND)
^   O exclusivo de bits (XOR)
|   O inclusivo de bits (OR)
&&  Y lógico (AND)
||  O lógico (OR)
expr?expr:expr
    evaluación condicional
= *= /= %= += -= <<= >>= &= ^= |=
    asignación

Se permite que las variables del shell actúen como operandos; se realiza la expansión de parámetro antes de la evaluación de la expresión. El valor de un parámetro se fuerza a un entero largo dentro de una expresión. Una variable del shell no necesita tener activado su atributo de entero para emplearse en una expresión.

Las constantes con un 0 inicial se interpretan como números octales. Un 0x ó 0X inicial denota un número en hexadecimal. De otro modo, los números toman la forma [base#]n, donde base es un número en base 10 entre 2 y 64 que representa la base aritmética, y n es un número en esa base. Si base se omite, entonces se emplea la base 10. Los dígitos mayores que 9 se representan por las letras minúsculas, las metras mayúsculas, _, y @, en este orden. Si base es menor o igual que 36, las letras minúsculas y mayúsculas pueden emplearse indistintamente para representar números entre 10 y 35.

Los operadores se evalúan en orden de precedencia. Las sub-expresiones entre paréntesis se evalúan primero y pueden sustituir a las reglas de precedencia anteriores.

EXPRESIONES CONDICIONALES
Las expresiones condicionales son empleadas por la orden compuesta [[ y por las órdenes internas test y [ para comprobar los atributos de ficheros y realizar comparaciones de cadenas y aritméticas. Las expresiones se forman a partir de las primarias monarias o binarias siguientes. Si cualquier argumento fichero de una de estas primarias es de la forma /dev/fd/n, entonces se comprueba el descriptor de fichero n.

-a fichero
    Verdad si fichero existe.
-b fichero
    Verdad si fichero existe y es un fichero especial de bloques.
-c fichero
    Verdad si fichero existe y es un fichero especial de caracteres.
-d fichero
    Verdad si fichero existe y es un directorio.
-e fichero
    Verdad si fichero existe.
-f fichero
    Verdad si fichero existe y es un fichero regular.
-g fichero
    Verdad si fichero existe y tiene el bit SGID.
-k fichero
    Verdad si fichero existe y tiene el bit ``pegajoso'' (STIcky).
-p fichero
    Verdad si fichero existe y es una tubería con nombre (FIFO).
-r fichero
    Verdad si fichero existe y se puede leer.
-s fichero
    Verdad si fichero existe y tiene un tamaño mayor que cero.
-t fd
    Verdad si el descriptor de fichero fd está abierto y se refiere a una terminal.
-u fichero
    Verdad si fichero existe y tiene el bit SUID.
-w fichero
    Verdad si fichero existe y se puede modificar.
-x fichero
    Verdad si fichero existe y es ejecutable.
-O fichero
    Verdad si fichero existe y su propietario es el UID efectivo.
-G fichero
    Verdad si fichero existe y su grupo es el GID efectivo.
-L fichero
    Verdad si fichero existe y es un enlace simbólico o blando.
-S fichero
    Verdad si fichero existe y es un zócalo (socket).
-N fichero
    Verdad si fichero existe y ha sido modificado desde que se leyó la última vez.
fichero1 -nt fichero2
    Verdad si fichero1 es más reciente (según la fecha de modificación) que fichero2.
fichero1 -ot fichero2
    Verdad si fichero1 es más antiguo que fichero2.
fichero1 -ef fichero2
    Verdad si fichero1 y fichero2 tienen los mismos números de nodo-í y de dispositivo.
-o nombre-opción
    Verdad si la opción del shell nombre-opción está activada. Vea la lista de opciones bajo la descripción de la opción -o de la orden interna set más abajo.
-z cadena
    Verdad si la longitud de cadena es cero.
-n cadena
cadena
    Verdad si la longitud de cadena no es cero.
cadena1 == cadena2
    Verdad si las cadenas son iguales. También se puede emplear = en vez de ==.
cadena1 != cadena2
    Verdad si las cadenas no son iguales.
cadena1 < cadena2
    Verdad si cadena1 se ordena lexicográficamente antes de cadena2 en la localización en curso.
cadena1 > cadena2
    Verdad si cadena1 se clasifica lexicográficamente tras cadena2 en la localización en curso.
arg1 OP arg2
    OP es uno de -eq, -ne, -lt, -le, -gt, o -ge. Estos operadores aritméticos binarios devuelven verdadero si arg1 es igual a, distinto de, menor que, menor o igual a, mayor que, o mayor o igual a arg2, respectivamente. Arg1 y arg2 pueden ser enteros positivos o negativos.

EXPANSIÓN DE ORDEN SIMPLE
Cuando se ejecuta una orden simple, el shell realiza las siguientes expansiones, asignaciones y redirecciones, de izquierda a derecha.

1.  Las palabras que el analizador ha marcado como asignaciones de variables (aquéllas que preceden al nombre de la orden) y redirecciones se guardan para un procesado posterior.

2.  Las palabras que no sean asignaciones de variables ni redirecciones se expanden. Si tras la expansión quedan aún palabras, la primera palabra se toma como el nombre de la orden y las palabras restantes son los argumentos.

3.  Se ejecutan las redirecciones como se describió más arriba bajo REDIRECCIÓN.

4.  El texto tras el = en cada asignación de variable está sujeto a expansión de tilde, expansión de parámetro, sustitución de orden, expansión aritmética y eliminado de comillas antes de ser asignado a la variable.

Si no resulta ningún nombre de orden, las asignaciones de variables afectan al entorno actual del shell. De otro modo, las variables se añaden al entorno de la orden ejecutada y no afectan al entorno del shell en curso. Si cualquiera de las asignaciones intenta dar un valor a una variable de lectura exclusiva, se produce un error, y la orden acaba con un estado distinto de cero.

Si no resulta ningún nombre de orden, se hacen las redirecciones, pero no afectan al entorno del shell en curso. Un error de redirección hace que el shell acabe con un estado distinto de cero.

Si hay un nombre de orden tras la expansión, la ejecución procede como se describió antes. De otro modo, la orden sale. Si una de las expansiones contenía una sustitución de orden, el estado de salida de la orden es el de la última sustitución de orden realizada. Si no había sustituciones de órdenes, la orden acaba con un estado de cero.

EJECUCIÓN DE ÓRDENES
Después de que una orden ha sido dividida en palabras, si el resultado es una orden simple y una lista opcional de argumentos, tienen lugar las siguientes acciones.

Si el nombre de la orden no contiene barras inclinadas, el shell intenta localizarla. Si existe una función del shell con ese nombre, esa función se llama como se describió arriba en FUNCIONES. Si el nombre no coincide con el de ninguna función, el shell lo busca en la lista de órdenes internas. Si se encuentra, se llama a la orden interna correspondiente.

Si el nombre no es ni una función del shell ni una orden interna, y no contiene barras inclinadas, bash busca en cada elemento de PATH un directorio que contenga un fichero ejecutable con ese nombre. Bash emplea una tabla de dispersión (hash) para recordar los nombres de camino completos de los ficheros ejecutables (vea hash en ÓRDENES INTERNAS DEL SHELL abajo). Sólo se realiza una búsqueda completa de los directorios de PATH si la orden no se encuentra en la tabla de dispersión. Si la búsqueda no es satisfactoria, el shell muestra un mensaje de error y devuelve un estado de salida de 127.

Si la búsqueda fue exitosa, o si el nombre de la orden contiene una o más barras inclinadas, el shell ejecuta el programa con ese nombre en un entorno de ejecución separado. El argumento 0 se pone al nombre dado, y el resto de argumentos de la orden se ponen a los argumentos dados, si los hay.

Si esta ejecución fallara porque el fichero no tuviera un formato ejecutable, y el fichero no fuera un directorio, se supone que es un guión del shell, un fichero que contiene órdenes del shell. Se crea un subshell para ejecutarlo. Este subshell se reinicia a sí mismo, así que el efecto es el mismo que si se hubiera llamado a un nuevo shell para manejar el guión, con la excepción de que el hijo retiene las localizaciones de órdenes recordadas por el padre (vea hash abajo en ÓRDENES INTERNAS DEL SHELL).

Si el programa es un fichero que empieza con los dos caracteres #!, el resto de la primera línea especifica un intérprete para el programa. El shell ejecuta el intérprete especificado en sistemas operativos que no manejen por sí mismos este formato de ejecutable. Los argumentos del intérprete consisten en un solo argumento opcional tras el nombre del intérprete en la primera linea del programa, seguido del nombre del programa, seguido por los argumentos de la orden, si los hubiera.

ENTORNO DE EJECUCIÓN DE ÓRDENES
El shell tiene un entorno de ejecución, que consiste en lo siguiente:

•   ficheros abiertos heredados por el shell en la llamada, quizás modificada por redirecciones suministradas a la orden interna exec

•   el directorio de trabajo en curso, establecido por cd, pushd o popd, o heredado por el shell en la llamada

•   la máscara de modo de creación de ficheros, establecida por umask o heredada del padre del shell

•   las trampas en curso establecidas por trap

•   parámetros del shell que han sido establecidos por asignaciones de variables o con set, o heredados del padre del shell en el entorno

•   funciones del shell definidas durante la ejecución o heredadas del padre del shell en el entorno

•   opciones activadas en la llamada (bien por omisión o mediante argumentos en la línea de órdenes) o por set

•   opciones activadas mediante shopt

•   alias del shell definidos con alias

•   varios identificadores de proceso, incluyendo los de trabajos en segundo plano, el valor de $$, y el valor de $PPID

Cuando una orden simple distinta de una interna o una función del shell se va a ejecutar, se llama en un entorno de ejecución separado que consiste en lo siguiente. A menos que se diga otra cosa, los valores se heredan del shell.

•   los ficheros abiertos del shell, más las modificaciones y adiciones especificadas en la orden por redirecciones

•   el directorio de trabajo en curso

•   la máscara de modo de creación de ficheros

•   variables del shell marcadas para la exportación, junto con variables exportadas para la orden, pasadas en el entorno

•   las trampas capturadas por el shell se restauran a los valores del padre del shell, y las trampas que no son tenidas en cuenta por el shell tampoco lo son

Una orden llamada en este entorno separado no puede afectar al entorno de ejecución del shell.

La sustitución de órdenes y las órdenes asíncronas se llaman en un entorno de subshell que es un duplicado del entorno del shell, excepto que las trampas capturadas por el shell se restauran a los valores que el shell heredó de su padre en la llamada. Las órdenes internas que se llaman como parte de una tubería se ejecutan también en un entorno de subshell. Los cambios hechos al entorno del subshell no pueden afectar al entorno de ejecución del shell.

ENTORNO
Cuando se llama a un programa, se le da un vector de cadenas de caracteres llamado el entorno. Esto es una lista de parejas nombre-valor, de la forma nombre=valor.

El shell le permite manipular el entorno de varias maneras. En la hora de la llamada, el shell escudriña el entorno y crea un parámetro para cada nombre encontrado, marcándolo automáticamente para la exportación a procesos hijos. Las órdenes ejecutadas heredan el entorno. Las órdenes export y declare -x permiten añadir y quitar parámetros y funciones del entorno. Si el valor de un parámetro en el entorno se modifica, el nuevo valor pasa a formar parte del entorno, reemplazando al antiguo. El entorno heredado por cualquier orden ejecutada consiste en el entorno inicial del shell, cuyos valores pueden ser modificados en el shell, menos las parejas quitadas mediante la orden unset más las adiciones con las órdenes export y declare -x.

El entorno para cualquier orden simple o función puede aumentarse temporalmente prefijándola con asignaciones de parámetros, como se describió arriba en PARÁMETROS. Estas sentencias de asignación afectan solamente al entorno visto por esa orden.

Si la opción -k está puesta (vea la orden interna set más adelante), entonces todas las asignaciones de parámetros se ponen en el entorno para una orden, no sólo las que preceden a su nombre.

Cuando bash llama a una orden externa, la variable _ se pone con el nombre completo del fichero de la orden y se pasa a esa orden en su entorno.

ESTADO DE SALIDA
Para los propósitos del shell, una orden que acabe con un estado de salida cero, ha tenido éxito. Un estado de salida de cero indica éxito. Un estado de salida distinto de cero indica fallo. Cuando una orden termina por una señal fatal, bash emplea el valor de 128+señal como el estado de salida.

Si una orden no se encuentra, el proceso hijo creado para ejecutarla devuelve un estado de 127. Si una orden se encuentra pero no es ejecutable, el estado de salida es 126.

Si una orden falla debido a un error durante la expansión o redirección, el estado de salida es mayor que cero.

Las órdenes incorporadas en el shell devuelven un estado de 0 (verdad) si acaban con éxito, y distinto de cero (falso) si ocurre un error mientras se ejecutan. Todas las órdenes internas devuelven un estado de salida de 2 para indicar un modo de empleo incorrecto.

El propio bash devuelve el estado de salida de la última orden ejecutada, a menos que ocurra un error de sintaxis, en cuyo caso acaba con un estado distinto de cero. Vea también la orden interna exit abajo.

SEÑALES
Cuando bash es interactivo, en la ausencia de trampas, no hace caso de SIGTERM (de modo que kill 0 no mata un shell interactivo), y se captura y maneja SIGINT (de manera que la orden interna wait es interrumpible). En todos los casos, bash no hace caso de SIGQUIT. Si el control de trabajos tiene efecto, bash no hace caso de SIGTTIN, SIGTTOU, y SIGTSTP.

Los trabajos síncronos empezados por bash tienen manejadores de señal puestos a los valores heredados por el shell de su padre. Cuando el control de trabajo no está en efecto, las órdenes internas no hacen caso de SIGINT ni SIGQUIT tampoco. Las órdenes ejecutadas como resultado de sustitución de orden no hacen caso de las señales de control de trabajo generadas mediante el teclado SIGTTIN, SIGTTOU, ni SIGTSTP.

El shell, de forma predeterminada, acaba cuando recibe una señal SIGHUP. Antes de salir, reenvía la señal SIGHUP a todos los trabajos, en ejecución o parados. A los trabajos parados se les envía SIGCONT para asegurarse de que reciben la señal SIGHUP. Para prevenir que el shell envíe la señal a un trabajo particular, debería quitarse de la lista de trabajos con la orden interna disown (vea ÓRDENES INTERNAS DEL SHELL más abajo) o marcarlo para no recibir SIGHUP empleando disown -h.

Si la opción del shell huponexit se ha puesto mediante shopt, bash envía una señal SIGHUP a todos los trabajos cuando un shell de entrada interactivo se acaba.

Cuando bash recibe una señal para la que se ha puesto una trampa mientras se se está esperando que una orden se complete, la trampa no se ejecutará hasta que la orden se complete. Cuando bash está esperando una orden asíncrona mediante la orden interna wait, la recepción de una señal para la que se ha definido una trampa, hará que la orden interna wait regrese inmediatamente con un estado de salida mayor que 128, inmediatamente tras que se ejecute la trampa.

CONTROL DE TRABAJOS
El control de trabajos se refiere a la capacidad de parar selectivamente (suspender) la ejecución de procesos y continuar (reanudar) su ejecución posteriormente. Un usuario emplea esta facilidad típicamente a través de una interfaz interactiva suministrada conjuntamente por el controlador de terminal del sistema y bash.

El shell asocia un trabajo con cada tubería. Mantiene una tabla de trabajos ejecutándose actualmente, que pueden listarse con la orden jobs. Cuando bash arranca un trabajo asíncronamente (en segundo plano), imprime una línea con un aspecto como ésta:

    [1] 25647

indicando que este trabajo es el número 1 y que el PID del último proceso en la tubería asociada con él es 25647. Todos los procesos en una misma tubería son miembros del mismo trabajo. Bash emplea la abstracción del trabajo como la base para el control de trabajos.

Para facilitar la implementación de la interfaz del usuario al control de trabajos, el sistema mantiene la noción de un identificador (ID) de grupo de procesos de la terminal en curso. Los miembros de este grupo de procesos (procesos cuyo PGID es igual al PGID de la terminal en curso) reciben señales generadas por el teclado como SIGINT. Se dice que estos procesos están en primer plano. Los procesos en segundo plano son aquéllos cuyo PGID difiere del de la terminal; tales procesos son inmunes a señales generadas desde el teclado. Sólo los procesos en primer plano tienen permitido leer o escribir en la terminal. A los procesos en segundo plano que intenten leer de (o escribir en) la terminal, el controlador de terminal les manda una señal SIGTTIN (SIGTTOU) que, a menos que sea capturada, suspende el proceso.

Si el sistema operativo en el que bash se está ejecutando, admite el control de trabajos (Linux lo admite, por supuesto), bash le permite usarlo. Teclear el carácter suspender (típicamente ^Z, Control-Z) mientras que un proceso se está ejecutando, hace que ese proceso se pare y le devuelve a Ud. al bash. Teclear el carácter suspensión diferida (típicamente ^Y, Control-Y) hace que el proceso se pare cuando intente leer entrada desde la terminal, y el control se devuelve a bash. El usuario puede entonces manipular el estado de este trabajo, empleando la orden bg para continuar con él en segundo plano, la orden fg para continuar con él en primer plano, o la orden kill para matarlo. Un ^Z tiene efecto inmediatamente, y tiene el efecto adicional colateral de que la salida pendiente y lo que haya en el búfer de entrada del teclado se descartan.

Hay varias formas de referirse a un trabajo en el shell. El carácter % introduce un nombre de trabajo. El trabajo número n puede ser referenciado como %n. Un trabajo puede ser referenciado utilizando un prefijo del nombre empleado para arrancarlo, o usando una subcadena que aparezca en su línea de órdenes. Por ejemplo. %ce se refiere a un trabajo ce parado. Si un prefijo concuerda con más de un trabajo, bash informa de un error. Usar %?ce, por otra parte, se refiere a cualquier trabajo que contenga la cadena ce en su línea de órdenes. Si la subcadena concuerda con más de un trabajo, bash informa de un error. Los símbolos %% y %+ se refieren a la noción que tiene el shell del trabajo en curso, que es el último trabajo parado mientras estaba en primer plano o se arrancó en segundo plano. El trabajo anterior puede referenciarse usando %-. En la salida relativa a trabajos (e.g., la salida de la orden jobs), el trabajo actual se marca siempre con un +, y el anterior con un -.

Si simplemente damos el nombre de un trabajo, esto puede traerlo a primer plano: %1 es un sinónimo de ``fg %1'', que trae el trabajo número 1 desde el segundo plano al primero. Similarmente, ``%1 &'' reanuda el trabajo 1 en el segundo plano, equivalente a ``bg %1''.

El shell se entera inmediatamente de cuando un trabajo cambia de estado. Normalmente, bash espera hasta que está a punto de mostrar un indicador antes de informar de cambios en el estado de un trabajo, para no interrumpir cualquier otra salida. Si la opción -b de la orden interna set está activada, bash informa de tales cambios inmediatamente.

Si se intenta salir de bash mientras hay trabajos parados, el shell muestra un mensaje de aviso. La orden jobs se puede usar entonces para inspeccionar sus estados. Si se hace un segundo intento de salir sin ninguna otra orden intermedia, el shell no muestra ningún otro aviso, y los trabajos parados se hacen terminar.

INDICADORES
Cuando se ejecuta interactivamente, bash muestra el indicador primario PS1 cuando está dispuesto para leer una orden, y el secundario PS2 cuando necesita más entrada para completar una orden. Bash permite que estas cadenas indicadoras se personalicen insertando un número de caracteres especiales protegidos con la barra inversa, que se interpretan como sigue:
    \a  un carácter de alerta ASCII (07)
    \d  la fecha en el formato "Día-Semana Mes Día" (ejemplo, "Tue May 26") en inglés
    \e  un carácter de escape (ESC) ASCII (033)
    \h  el nombre del computador anfitrión hasta el primer `.'
    \H  el nombre del computador anfitrión completo
    \n  salto de línea
    \r  retorno de carro
    \s  el nombre del shell, el nombre base de $0 (la porción que sigue a la última barra inclinada)
    \t  la hora actual en el formato de 24 horas HH:MM:SS
    \T
        la hora actual en el formato de    12 horas HH:MM:SS
    \@  la hora actual en el formato de 12 horas con indicador AM/PM
    \u  el nombre de usuario del usuario en curso
    \v  la versión de bash (e.g., 2.00)
    \V  la distribución de bash, versión + nivel de parcheo (e.g., 2.00.0)
    \w  el directorio de trabajo en curso
    \W  el nombre base del directorio de trabajo
    \!  el número de historia de esta orden
    \#  el número de orden de esta orden
    \$  si el UID efectivo es 0 (el super-usuario), un #, si no un $
    \nnn
        el carácter correspondiente al número octal nnn
    \\  una barra inclinada invertida
    \[  empieza una secuencia de caracteres no imprimibles, que pueden emplearse para empotrar una secuencia de control del terminal en el indicador
    \]  termina una secuencia de caracteres no imprimibles

El número de orden y el número de historia son usualmente diferentes: el número de historia de una orden es su posición en la lista de historia, que puede incluir órdenes restauradas desde el fichero de historia (vea HISTORIA más abajo), mientras que el número de orden es la posición en la secuencia de órdenes ejecutadas durante la sesión de shell actual. Después de que la cadena es descodificada, se expande mediante la expansión de parámetros, sustitución de órdenes, expansión aritmética, expansión de cadena, y eliminación de comillas, sujeta al valor de la opción del shell promptvars (vea la descripción de la orden shopt bajo ÓRDENES INTERNAS DEL SHELL más adelante).

READLINE
Readline (leer línea) es la biblioteca que maneja la lectura de la entrada cuando se usa un shell interactivo, a menos que se haya dado la opción --noediting cuando se llamó. De forma predeterminada, las órdenes de edición de la línea son similares a las de emacs. También se dispone de una interfaz de edición de líneas al estilo de vi. Para desactivar la edición de líneas una vez que el shell está en ejecución, use las opciones +o emacs o +o vi de la orden interna set (vea ÓRDENES INTERNAS DEL SHELL abajo).

  Notación de Readline

En esta sección, se emplea la notación al estilo de emacs para denotar las teclas. Las teclas de control se representan por medio de C-tecla; así, C-n significa Control-N. De forma similar, las teclas meta (Alt) se representan con M-tecla, de forma que M-x significa Meta-X. (En teclados sin tecla meta, M-x significa ESC x, i.e., pulsar la tecla de escape (Esc) y luego la tecla x. Esto hace que ESC sea el prefijo meta. La combinación M-C-x quiere decir ESC-Control-x, o pulsar la tecla Escape y luego mantener presionada la tecla Control mientras se pulsa la tecla x.)

Las órdenes de readline pueden recibir argumentos numéricos que actúan normalmente como un número de repetición. Algunas veces, empero, lo que tiene significado es el signo del argumento. Pasar un argumento negativo a una orden que actúa en la dirección adelante (p. ej., kill-line) hace que esa orden actúe en la dirección contraria, hacia atrás. Las órdenes cuyo comportamiento con argumentos se desvíe de esto se señalan más adelante.

Cuando una orden se describe como que corta texto, el texto borrado se guarda para una posible futura recuperación (pegado). El texto cortado se guarda en un anillo de corte. Cortes consecutivos hacen que el texto se acumule en una unidad, que puede pegarse toda de golpe, de una vez. Las órdenes que no cortan texto separan los trozos de texto en el anillo de corte.

  Inicio de Readline

Readline se personaliza poniendo órdenes en un fichero de inicio (el fichero inputrc). El nombre de este fichero se toma del valor de la variable INPUTRC. Si esta variable no está definida, el valor predeterminado es ~/.inputrc. Cuando un programa que hace uso de la biblioteca readline arranca, el fichero de inicio se lee, y se establecen las definiciones de teclas y variables. Sólo se permiten unas pocas construcciones básicas en el fichero de inicio de readline. Las líneas en blanco no se tienen en cuenta. Las líneas que comiencen con un # son comentarios. Las líneas que comiencen con un $ indican construcciones condicionales. Otras líneas representan definiciones de teclas y definiciones de variables.

Las definiciones predeterminadas de teclas pueden cambiarse con un fichero inputrc. Otros programas que usen esta biblioteca pueden añadir sus propias órdenes y definiciones.

Por ejemplo, el poner

    M-Control-u: universal-argument
o
    C-Meta-u: universal-argument
dentro del fichero inputrc haría que M-C-u ejecutara la orden de readline universal-argument.

Se reconocen los siguientes nombres simbólicos de caracteres: RUBOUT, DEL, ESC, LFD, NEWLINE, RET, RETURN, SPC, SPACE, y TAB. Además de los nombres de órdenes, readline permite que se enlace una tecla cualquiera a una cadena de caracteres que se inserta cuando la tecla se pulse (una macro).

  Definiciones de teclas de Readline

La sintaxis para controlar las definiciones de teclas en el fichero inputrc es simple. Todo lo que se requiere es el nombre de la orden o el texto de una macro y una secuencia de teclas con la cual debe enlazarse. El nombre se puede especificar en una de dos formas: como un nombre simbólico de tecla, posiblemente con prefijos Meta- o Control-, o como una secuencia de teclas. Cuando se use la forma nombre-tecla:nombre-función o macro, nombre-tecla es el nombre de una tecla en inglés. Por ejemplo:

    Control-u: universal-argument
    Meta-Rubout: backward-kill-word
    Control-o: "> salida"

En el ejemplo de arriba, C-u se enlaza a la función universal-argument, M-DEL se vincula a la función backward-kill-word, y C-o se define como que se ejecute la macro expresada en la parte derecha (esto es, insertar el texto > salida en la línea).

En la segunda forma, "sectecla":nombre-función o macro, sectecla difiere de la nombre-tecla de antes en que las cadenas que representan una secuencia entera de teclas pueden especificarse poniendo la secuencia entre comillas dobles. Así se pueden utilizar algunas teclas de escape al estilo de GNU Emacs, como en el siguiente ejemplo.

    "\C-u": universal-argument
    "\C-x\C-r": re-read-init-file
    "\e[11~": "Tecla de Función 1"

En este ejemplo, C-u se enlaza de nuevo a la función universal-argument. C-x C-r se vincula a la función re-read-init-file, y ESC [ 1 1 ~ se define como que se inserte el texto Tecla de Función 1. El conjunto completo de las secuencias de escape al estilo de GNU Emacs es
    \C- prefijo de control
    \M- prefijo meta
    \e  un carácter de Escape
    \\  barra inclinada inversa
    \"  una " literal
    \'  un ' literal

Además de las secuencias de escape al estilo de GNU Emacs, se dispone de un segundo conjunto de escapes con la barra invertida:
    \a  alerta (campana)
    \b  espacio atrás
    \d  borrado
    \f  salto de página
    \n  salto de línea
    \r  retorno de carro
    \t  tabulador horizontal
    \v  tabulador vertical
    \nnn
        el carácter cuyo código es el valor octal nnn (de 1 a 3 dígitos)
    \xnnn
        el carácter cuyo código es el valor hexadecimal nnn (de 1 a 3 dígitos)

Cuando se mete el texto de una macro, se deben emplear comillas simples o dobles para indicar una definición de macro. El texto no entrecomillado se supone un nombre de función. En el cuerpo de la macro, los escapes con barra inversa de arriba se expanden. La barra inversa protegerá a cualquier otro carácter en el texto de la macro, incluyendo a " y a '.

Bash permite mostrar o modificar las definiciones de teclas en curso mediante la orden interna bind. El modo de edición puede cambiarse durante una sesión interactiva empleando la opción -o de la orden interna set (vea ÓRDENES INTERNAS DEL SHELL abajo).

  Variables de Readline

Readline tiene variables que se pueden usar para personalizar más aún su comportamiento. Una variable se puede definir en el fichero inputrc con una sentencia de la forma

    set nombre-variable valor

Excepto cuando se diga, las variables de readline pueden tomar los valores On u Off. Las variables y sus valores predeterminados son:

bell-style (audible)
    Controla qué pasa cuando readline quiere tocar el pito de la terminal. Si se define como none, readline nunca toca el pito. Si se pone a visible, readline usa una alerta visible si está disponible. Si se pone como audible, readline intenta hacer sonar el pito de la terminal.
comment-begin (``#'')
    La cadena que se inserta cuando se ejecuta la orden de readline insert-comment. Esta orden está enlazada a M-# en modo emacs y a # en modo vi.
completion-ignore-case (Off)
    Si se pone a On, readline realiza la concordancia y terminación de nombres de ficheros sin importar si las letras son mayúsculas o minúsculas.
completion-query-items (100)
    Esto determina cuándo se pregunta al usuario si quiere ver el número de terminaciones posibles generadas por la orden possible-completions. Puede ponerse a cualquier valor entero mayor o igual a cero. Si el número de posibles terminaciones es mayor o igual que el valor de esta variable, al usuario se le pregunta si desea o no verlas; si no, simplemente se muestran en la terminal.
convert-meta (On)
    Si se pone a On, readline convertirá caracteres con el octavo bit a uno a una secuencia de teclas ASCII poniendo el octavo bit a cero y prefijando un carácter Esc (en efecto, usando Esc como el prefijo meta).
disable-completion (Off)
    Si se pone a On, readline inhibirá la terminación de palabras. Los caracteres para la terminación se insertarán en la línea como si se hubieran hecho corresponder con self-insert.
editing-mode (emacs)
    Controla si readline empieza con un conjunto de definiciones de teclas similar a las de emacs o vi. editing-mode puede ponerse a los valores emacs o vi.
enable-keypad (Off)
    Cuando se pone a On, readline intentará activar el teclado auxiliar cuando se llame. Algunos sistemas necesitan esto para activar las teclas de flechas de cursor.
expand-tilde (Off)
    Si se pone a on, la expansión de tilde se realiza cuando readline intenta la terminación de palabras.
horizontal-scroll-mode (Off)
    Cuando se pone a On, esto hace que readline use una sola línea para pantalla, haciendo rodar la entrada horizontalmente en una sola línea de la pantalla cuando ésta es más larga que la anchura de la pantalla; en lugar de seguir en la línea siguiente.
input-meta (Off)
    Si se pone a On, readline habilitará la entrada de 8 bits (esto es, no pondrá a cero el octavo bit de los caracteres que lea), sin importar lo que la terminal diga que admite. El nombre meta-flag es un sinónimo para esta variable.
keymap (emacs)
    Establece el mapa de teclado actual para readline. El conjunto de nombres de mapas de teclado válidos es emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-command, y vi-insert. vi es equivalente a vi-command; emacs es equivalente a emacs-standard. El valor predeterminado es emacs; el valor de editing-mode también afecta al mapa de teclado predeterminado.
mark-directories (On)
    Si se pone a On, los nombres de directorios completados tendrán una barra inclinada añadida al final.
mark-modified-lines (Off)
    Si se pone a On, las líneas de historia que hayan sido modificadas se muestran con un asterisco precediéndolas (*).
output-meta (Off)
    Si se pone a On, readline mostrará directamente los caracteres con el octavo bit a uno, en vez de como una secuencia de escape prefijada con meta.
print-completions-horizontally (Off)
    Si se pone a On, readline mostrará terminaciones con concordancias clasificadas horizontalmente en orden alfabético, en vez de verticalmente.
show-all-if-ambiguous (Off)
    Esto altera el comportamiento predeterminado de las funciones de terminación. Si se pone a on, las palabras que tienen más de una posible terminación hacen que las concordancias se muestren inmediatamente en vez de tocarse el pito de la terminal.
visible-stats (Off)
    Si se pone a On, se añade un carácter que represente un tipo de fichero según lo que devuelve stat(2) cuando se listan las terminaciones posibles.

  Construcciones condicionales de Readline

Readline implementa una facilidad similar en espíritu a las características de compilación condicional del preprocesador de C que permite que las definiciones de teclas y variables se realicen en función de pruebas o condiciones. Hay cuatro directivas del analizador que se usan.

$if La construcción $if permite que las definiciones se hagan según el modo de edición, la terminal en uso, o la aplicación que haga uso de readline. El texto de la condición se extiende hasta el final de la línea; no se requieren caracteres para aislarla.

    mode
        La forma mode= de la directiva $if se usa para ver si readline está en modo emacs o vi. Esto se puede emplear en conjunción con la orden set keymap, por ejemplo, para poner el teclado en los mapas emacs-standard y emacs-ctlx sólo si readline está arrancando en modo emacs.

    term
        La forma term= puede emplearse para incluir definiciones de teclas específicas de una terminal determinada, quizás para enlazar las secuencias de teclas generadas por las teclas de función de la terminal. La palabra en la parte derecha del = se prueba contra el nombre completo de la terminal y contra la porción del nombre de la terminal antes del primer -. Esto permite que sun concuerde con sun y con sun-cmd, por ejemplo.

    application
        La construcción application se emplea para incluir definiciones específicas de la aplicación. Cada programa que usa la biblioteca readline define el nombre de la aplicación, y en un fichero de arranque se puede comprobar si existe un valor en particular. Esto se podría emplear para enlazar secuencias de teclas a funciones útiles para un programa específico. Por ejemplo, la orden siguiente añade una secuencia de teclas que entrecomilla la palabra en curso o la anterior en bash:

        $if Bash
        # Entrecomilla la palabra actual o previa
        "\C-xq": "\eb\"\ef\""
        $endif

$endif
    Esta orden, como se ha visto en el ejemplo precedente, termina una orden $if.

$else
    Las órdenes en esta rama de la directiva $if se ejecutan si la comprobación falla.

$include
    Esta directiva toma como argumento un solo nombre de fichero y lee órdenes y definiciones de ese fichero. Por ejemplo, la siguiente directiva leería de /etc/inputrc:

    $include  /etc/inputrc

  Búsquedas

Readline proporciona órdenes para buscar a través de la historia de órdenes (vea HISTORIA abajo) líneas que contengan una cadena especificada. Hay dos modos de búsqueda: incremental y no incremental.

La búsqueda incremental comienza antes de que el usuario haya acabado de teclear la cadena a buscar. Tan pronto como se teclea cada carácter de la cadena de búsqueda, readline muestra la siguiente entrada de la historia que concuerde con la cadena que se esté tecleando hasta este punto. Una búsqueda incremental requiere solamente tantos caracteres como se necesiten para encontrar la entrada deseada en la lista de historia. El carácter Escape se emplea para terminar una búsqueda incremental. Control-J también dará por terminada la búsqueda. Control-G parará abruptamente una búsqueda incremental y restaurará la línea original. Cuando la búsqueda se termine, la entrada de la historia que contuviera la cadena de búsqueda se convierte en la línea en curso. Para encontrar otras entradas en la lista de historia, teclee Control-S o Control-R, según sea apropiado. Esto buscará hacia atrás o adelante en la historia la siguiente entrada concordante con la cadena de búsqueda tecleada hasta este punto. Cualquier otra secuencia de teclas asociada a una orden de readline terminará la búsqueda y ejecutará esa orden. Por ejemplo, una nueva-línea terminará la búsqueda y aceptará la línea, ejecutando de ese modo la orden de la lista de historia.

Las búsquedas no incrementales leen la cadena de búsqueda entera antes de empezar a buscar en las líneas de la lista de historia. La cadena de búsqueda puede ser tecleada por el usuario o ser parte de los contenidos de la línea en curso.

  Nombres de órdenes de Readline

Lo siguiente es una lista de los nombres de las órdenes y las secuencias de teclas predeterminadas a las que están asociadas. Los nombres de órdenes sin una secuencia de tecla acompañante pertenecen a órdenes que no están asociadas a ninguna secuencia de teclas de forma predeterminada.

  Órdenes para el movimiento

beginning-of-line (C-a)
    Mover al principio de la línea en curso.
end-of-line (C-e)
    Mover al final de la línea.
forward-char (C-f)
    Mover un carácter hacia adelante.
backward-char (C-b)
    Mover un carácter hacia atrás.
forward-word (M-f)
    Mover adelante hasta el final de la siguiente palabra. Las palabras se componen de caracteres alfanuméricos (letras y dígitos).
backward-word (M-b)
    Mover atrás hasta el principio de esta palabra o la anterior. Las palabras se componen de caracteres alfanuméricos (letras y dígitos).
clear-screen (C-l)
    Limpiar la pantalla dejando la línea en curso al principio de la pantalla. Con un argumento, refresca la línea en curso sin borrar la pantalla.
redraw-current-line
    Refrescar la línea en curso.

  Órdenes para manipular la lista de historia

accept-line (Nueva-línea, Intro)
    Aceptar la línea sin importar dónde esté el cursor. Si esta línea no está vacía, añadirla a la lista de historia de acuerdo con el estado de la variable HISTCONTROL. Si la línea es una de las de la historia, modificada, entonces restaurar la línea de la historia a su estado original.
previous-history (C-p)
    Obtener la orden anterior de la lista de historia, moviéndose hacia atrás en ella.
next-history (C-n)
    Obtener la orden siguiente de la lista de historia, moviéndose hacia delante en ella.
beginning-of-history (M-<)
    Mover a la primera línea de la lista de historia.
end-of-history (M->)
    Mover al final de la historia de entrada; esto es, la línea que está siendo introducida en la actualidad.
reverse-search-history (C-r)
    Buscar hacia atrás empezando en la línea en curso y moviéndose `arriba' a través de la lista de historia si es necesario. Esta búsqueda es incremental.
forward-search-history (C-s)
    Buscar hacia adelante empezando en la linea en curso y moviéndose `abajo' a través de la lista de historia si es necesario. Esta búsqueda es incremental.
non-incremental-reverse-search-history (M-p)
    Buscar hacia atrás a través de la lista de historia empezando en la línea en curso empleando una búsqueda no incremental de una cadena suministrada por el usuario.
non-incremental-forward-search-history (M-n)
    Buscar hacia delante a través de la lista de historia empezando en la línea en curso empleando una búsqueda no incremental de una cadena suministrada por el usuario.
history-search-forward
    Buscar hacia delante a través de la lista de historia una cadena de caracteres entre el comienzo de la línea en curso y la posición actual del cursor (el punto). Esta búsqueda no es incremental.
history-search-backward
    Buscar hacia atrás a través de la lista de historia una cadena de caracteres entre el comienzo de la línea en curso y la posición actual del cursor (el punto). Esta búsqueda no es incremental.
yank-nth-arg (M-C-y)
    Insertar el primer argumento de la orden anterior (normalmente la segunda palabra de la línea previa) en el punto (la posición actual del cursor). Con un argumento n, insertar la n-sima palabra de la orden anterior (las palabras en la orden anterior empiezan con la palabra 0). Un argumento negativo inserta la n-sima palabra desde el final de la orden anterior.
yank-last-arg (M-., M-_)
    Insertar el último argumento de la orden anterior (la última palabra de la entrada anterior de la lista de historia). Con un argumento, se comporta exactamente como yank-nth-arg. Llamadas sucesivas a yank-last-arg mueven hacia atrás en la lista de historia, insertando cada vez el último argumento de cada línea.
shell-expand-line (M-C-e)
    Expandir la línea como hace el shell. Esto realiza la expansión de alias y de historia así como todas las expansiones de palabra del shell. Vea EXPANSIÓN DE HISTORIA abajo para una descripción de la expansión de historia.
history-expand-line (M-^)
    Realizar la expansión de historia en la línea en curso. Vea EXPANSIÓN DE HISTORIA abajo para una descripción de la expansión de historia.
magic-space
    Efectuar la expansión de historia en la línea en curso e insertar un espacio. Vea EXPANSIÓN DE HISTORIA abajo para una descripción de la expansión de historia.
alias-expand-line
    Realizar la expansión de alias en la línea en curso. Vea ALIAS arriba para una descripción de la expansión de alias.
history-and-alias-expand-line
    Realizar la expansión de historia y alias en la línea en curso.
insert-last-argument (M-., M-_)
    Un sinónimo para yank-last-arg.
operate-and-get-next (C-o)
    Aceptar la línea en curso para la ejecución y obtener la línea siguiente relativa a la actual desde la lista de historia, para la edición. Cualquier argumento no se tiene en cuenta.

  Órdenes para cambiar el texto

delete-char (C-d)
    Borrar el carácter bajo el cursor. Si el punto está al principio de la línea, no hay caracteres en la línea, y el último carácter tecleado no estaba asociado a delete-char, entonces devolver EOF.
backward-delete-char (<X], DEL)
    Borrar el carácter tras el cursor. Cuando se da un argumento numérico, guardar el texto borrado en el anillo de corte.
quoted-insert (C-q, C-v)
    Añadir el siguiente carácter tecleado a la línea tal cual. Así es como se pueden insertar caracteres como C-q, por ejemplo.
tab-insert (C-v TAB)
    Insertar un carácter de tabulación.
self-insert (a, b, A, 1, !, ...)
    Insertar el carácter tecleado.
transpose-chars (C-t)
    Arrastrar el carácter antes del punto hacia adelante sobre el carácter en el punto. El punto se mueve adelante también. Si el punto está al final de la línea, entonces transpone los dos caracteres antes del punto. Los argumentos negativos no funcionan.
transpose-words (M-t)
    Arrastrar la palabra tras el cursor al lugar pasado la palabra enfrente del cursor, moviendo el cursor también sobre esa palabra.
upcase-word (M-u)
    Poner en mayúsculas la palabra en curso (o la siguiente). Con un argumento negativo, pone la anterior, pero no mueve el punto.
downcase-word (M-l)
    Poner en minúsculas la palabra en curso (o la siguiente). Con un argumento negativo, pone la anterior, pero no mueve el punto.
capitalize-word (M-c)
    Poner en mayúscula la inicial de la palabra en curso (o la siguiente). Con un argumento negativo, pone la anterior, pero no mueve el punto.

  Cortar y pegar

kill-line (C-k)
    Cortar el texto desde la posición actual del cursor hasta el final de la línea.
backward-kill-line (C-x DEL)
    Cortar hacia atrás hasta el principio de la línea.
unix-line-discard (C-u)
    Cortar hacia atrás desde el punto hasta el principio de la línea. El texto cortado se guarda en el anillo de corte.
kill-whole-line
    Cortar todos los caracteres de la línea en curso, sin importar dónde esté el cursor.
kill-word (M-d)
    Cortar desde el cursor hasta el final de la palabra en curso, o si entre palabras, hasta el final de la siguiente. Los extremos de las palabras son los mismos que los empleados por forward-word.
backward-kill-word (M-DEL)
    Cortar la palabra tras el cursor. Los extremos de las palabras son los mismos que los empleados por backward-word.
unix-word-rubout (C-w)
    Cortar la palabra tras el cursor, empleando el espacio en blanco como un límite de palabra. Los extremos de las palabras son diferentes de los de backward-kill-word.
delete-horizontal-space (M-\)
    Borrar todos los espacios y tabuladores alrededor del punto.
kill-region
    Cortar el texto entre el punto y la marca (posición registrada del cursor). Este texto se conoce como la región.
copy-region-as-kill
    Copiar el texto en la región al anillo de corte.
copy-backward-word
    Copiar la palabra antes del punto al búfer de corte. Los extremos de palabras son los mismos que con backward-word.
copy-forward-word
    Copiar la palabra que sigue al punto al búfer de corte. Los extremos de palabra son los mismos que con forward-word.
yank (C-y)
    Pegar la cima del anillo de corte en el búfer en donde esté el cursor.
yank-pop (M-y)
    Rotar en el anillo de corte, y pegar la nueva cima. Sólo funciona tras un yank o yank-pop.

  Argumentos numéricos

digit-argument (M-0, M-1, ..., M--)
    Añadir este dígito al argumento, acumulándolo, o comenzar con un nuevo argumento. M-- empieza un argumento negativo.
universal-argument
    Ésta es otra forma de especificar un argumento. Si esta orden se hace seguir de uno o más dígitos, opcionalmente con un signo menos inicial, estos dígitos definen el argumento. Si a la orden siguen dígitos, ejecutar de nuevo universal-argument finaliza el argumento numérico, pero si no, no se tiene en cuenta. Como un caso especial, si a esta orden sigue inmediatamente un carácter que no es ni un dígito ni un signo menos, el número del argumento para la siguiente orden se multiplica por cuatro. El número del argumento es inicialmente uno, así que ejecutar esta función por primera vez hace que el número del argumento sea cuatro, una segunda vez lo hace dieciséis, y así sucesivamente.

  Terminación

complete (TAB)
    Intentar realizar una terminación del texto antes del punto. Bash intenta la terminación tratando al texto como una variable (si el texto comienza con $), como un nombre de usuario (si el texto empieza con ~), como un nombre de computador anfitrión (si el texto comienza con @), o como una orden (incluyendo alias y funciones), por este orden. Si nada de esto concuerda, se intenta la terminación de un nombre de fichero.
possible-completions (M-?)
    Listar las terminaciones posibles del texto antes del punto.
insert-completions (M-*)
    Insertar todas las terminaciones del texto antes del punto que habrían sido generadas por possible-completions.
menu-complete
    Similar a complete, pero reemplaza la palabra a ser completada con una sola concordancia de la lista de terminaciones posibles. La ejecución repetida de menu-complete camina por la lista de terminaciones posibles, insertando cada concordancia por turnos. Al final de la lista de terminaciones, se hace sonar el pito de la terminal y el texto original se restaura. Un argumento n mueve n posiciones hacia delante en la lista de concordancias; un argumento negativo se puede emplear para moverse hacia atrás en la lista. Esta orden está pensada para ser asociada a TAB, pero no está asociada a ninguna tecla de forma predeterminada.
complete-filename (M-/)
    Intentar la terminación de un nombre de fichero en el texto antes del punto.
possible-filename-completions (C-x /)
    Listar las posibles terminaciones del texto antes del punto, tratándolo como un nombre de fichero.
complete-username (M-~)
    Intentar la terminación del texto antes del punto, tratándolo como un nombre de usuario.
possible-username-completions (C-x ~)
    Listar las posibles terminaciones del texto antes del punto, tratándolo como un nombre de usuario.
complete-variable (M-$)
    Intentar la terminación del texto antes del punto, tratándolo como una variable del shell.
possible-variable-completions (C-x $)
    Listar las posibles terminaciones del texto antes del punto, tratándolo como una variable del shell.
complete-hostname (M-@)
    Intentar la terminación del texto antes del punto, tratándolo como un nombre de computador anfitrión.
possible-hostname-completions (C-x @)
    Listar las posibles terminaciones del texto antes del punto, tratándolo como un nombre de computador anfitrión.
complete-command (M-!)
    Intentar la terminación del texto antes del punto, tratándolo como un nombre de orden. La terminación de orden intenta hacer concordar el texto con alias, palabras reservadas, funciones del shell, órdenes internas del shell, y finalmente nombres de ficheros ejecutables, en ese orden.
possible-command-completions (C-x !)
    Listar las posibles terminaciones del texto antes del punto, tratándolo como un nombre de orden.
dynamic-complete-history (M-TAB)
    Intentar la terminación del texto antes del punto, comparando el texto con líneas de la lista de historia buscando concordancias para la terminación.
complete-into-braces (M-{)
    Efectuar la terminación de nombres de ficheros y devolver la lista de terminaciones posibles encerrada entre llaves de forma que la lista esté disponible al shell (vea Expansión de llaves arriba).

  Macros de teclado

start-kbd-macro (C-x ()
    Empezar a grabar los caracteres tecleados, en la macro de teclado en curso.
end-kbd-macro (C-x ))
    Parar de grabar los caracteres tecleados en la macro de teclado en curso, y almacenar la definición.
call-last-kbd-macro (C-x e)
    Reejecutar la última macro de teclado definida, haciendo que los caracteres en la macro aparezcan como si se hubieran pulsado en el teclado.

  Miscelánea

re-read-init-file (C-x C-r)
    Leer los contenidos del fichero inputrc, e incorporar cualesquiera definiciones de teclas o asignaciones de variables que se hubieran encontrado en él.
abort (C-g)
    Terminar abruptamente la orden de edición en curso y tocar el pito de la terminal (según el establecimiento de bell-style).
do-uppercase-version (M-a, M-b, M-x, ...)
    Si el carácter meta x está en minúscula, ejecutar la orden que esté asociada al carácter correspondiente en mayúscula.
prefix-meta (ESC)
    Convertir en meta el siguiente carácter tecleado. ESC f es equivalente a Meta-f.
undo (C-_, C-x C-u)
    Deshacer de forma incremental, recordado separadamente para cada línea.
revert-line (M-r)
    Deshacer todos los cambios hechos a esta línea. Esto es como ejecutar la orden undo las veces suficientes como para devolver la línea a su estado inicial.
tilde-expand (M-~)
    Efectuar la expansión de tilde en la palabra en curso.
set-mark (C-@, M-<espacio>)
    Establecer la marca en el punto actual. Si se da un argumento numérico, la marca se establece en esa posición.
exchange-point-and-mark (C-x C-x)
    Cambia el punto con la marca. La posición actual del cursor se pone en la posición guardada, y la vieja posición del cursor se guarda como la marca.
character-search (C-])
    Se lee un carácter y el punto se mueve a la siguiente ocurrencia de ese carácter. Un argumento numérico negativo hace que la búsqueda sea de las ocurrencias anteriores.
character-search-backward (M-C-])
    Se lee un carácter y el punto se mueve a la anterior ocurrencia de ese carácter. Un argumento numérico negativo hace que la búsqueda sea de las ocurrencias siguientes.
insert-comment (M-#)
    El valor de la variable de readline comment-begin se inserta al principio de la línea en curso, y la línea se acepta como si se hubiera tecleado Intro (nueva-línea). Esto convierte la línea en curso en un comentario del shell.
glob-expand-word (C-x *)
    La palabra antes del punto se trata como un patrón para la expansión de nombres de caminos y la lista de nombres de fichero concordantes se inserta, reemplazando a la palabra.
glob-list-expansions (C-x g)
    Mostrar la lista de expansiones que habrían sido generadas por glob-expand-word y redibujar la línea.
dump-functions
    Mostrar todas las funciones y sus asociaciones de teclas en el flujo de salida de readline. Si se da un argumento numérico, la salida se formatea de tal modo que pueda formar parte de un fichero inputrc.
dump-variables
    Mostrar todas las variables de readline a las que se puedan asignar valores, y éstos, en el flujo de salida de readline. Si se da un argumento numérico, la salida se formatea de tal manera que pueda formar parte de un fichero inputrc.
dump-macros
    Mostrar todas las secuencias de teclas de readline asociadas a macros y las cadenas de caracteres asociadas correspondientes. Si se da un argumento numérico, la salida se formatea de tal manera que pueda formar parte de un fichero inputrc.
display-shell-version (C-x C-v)
    Mostrar información de versión acerca de la instancia actual de bash.

HISTORIA
Cuando se habilita la opción -o history de la orden interna set, el shell da acceso a la historia de órdenes, la lista de órdenes tecleadas con anterioridad. El texto de los últimos HISTSIZE mandatos (por omisión, 500) se guarda en una lista de historia. El shell almacena cada orden en la lista de historia antes de la expansión de parámetros y variables (vea EXPANSIÓN arriba) pero tras efectuar la expansión de historia, sujeta a los valores de las variables del shell HISTIGNORE e HISTCONTROL. En el arranque, la historia se inicia a partir del fichero nombrado en la variable HISTFILE (por omisión ~/.bash_history). HISTFILE se trunca, si es necesario, para contener no más de HISTFILESIZE líneas. Cuando un shell interactivo termina, las últimas HISTSIZE líneas se copian de la lista de historia a HISTFILE. Si la opción del shell histappend está activa (vea la descripción de shopt bajo ÓRDENES INTERNAS DEL SHELL más adelante), las líneas se añaden al fichero de historia; si no, el fichero de historia se sobreescribe. Si HISTFILE no está definido, o si no se puede escribir en el fichero de historia, la historia no se guarda. Tras guardar la historia, el fichero de historia se trunca para contener no más de HISTFILESIZE líneas. Si HISTFILESIZE no está definido, no se trunca.

La orden interna fc (vea ÓRDENES INTERNAS DEL SHELL abajo) puede emplearse para listar o editar y re-ejecutar una porción de la lista de historia. La orden interna history se puede utilizar para mostrar o modificar la lista de historia y manipular el fichero de historia. Cuando se emplea la edición de líneas de órdenes, están disponibles las órdenes de búsqueda en cada modo de edición que proporcionan acceso a la lista de historia.

El shell permite el control sobre qué órdenes se guarden en la lista de historia. Las variables HISTCONTROL y HISTIGNORE se pueden definir de forma que el shell guarde solamente un subconjunto de las órdenes introducidas. La opción del shell cmdhist, si está habilitada, hace que el shell intente guardar cada línea de una orden multi-línea en la misma entrada de la historia, añadiendo punto y comas donde sea necesario para preservar la corrección sintáctica. La opción del shell lithist hace que el shell guarde la orden con saltos de línea empotrados en vez de punto y comas. Vea la descripción de la orden interna shopt abajo en ÓRDENES INTERNAS DEL SHELL para información sobre cómo establecer y anular opciones del shell.

EXPANSIÓN DE HISTORIA

El shell admite una característica de expansión de historia que es parecida a la expansión de historia en csh. Esta sección describe qué características sintácticas están disponibles. Esta característica está habilitada de forma predeterminada en shells interactivos, y puede ser desactivada mediante la opción +H de la orden interna set (vea ÓRDENES INTERNAS DEL SHELL abajo). Los shells no interactivos no realizan la expansión de la historia de forma predeterminada.

Las expansiones de historia introducen palabras desde la lista de historia en el flujo de entrada, facilitando así la repetición de órdenes, la inserción de argumentos de una orden anterior en la línea de entrada en curso, o la corrección rápida de errores en una orden anterior.

La expansión de historia se realiza inmediatamente tras la lectura de una línea completa, antes de que el shell la divida en palabras. Tiene lugar en dos fases. En la primera se determina qué línea de la lista de historia hay que emplear durante la sustitución. En la segunda se seleccionan porciones de esa línea para su inclusión en la actual. La línea seleccionada desde la historia es el evento, y la porción de esa línea sobre la que se actúa son palabras. Se dispone de varios modificadores para manipular las palabras seleccionadas. La línea se divide en palabras de la misma manera que cuando se lee la entrada, de forma que ciertas palabras separadas por meta-caracteres rodeadas por comillas se consideran una sola palabra. Las expansiones de historia se introducen por la aparición del carácter de expansión de historia, que es por omisión !. Sólo las barras inversas (\) y las comillas simples pueden proteger al carácter de expansión de historia.

Se pueden emplear ciertas opciones que se ponen con la orden interna shopt para cambiar el comportamiento de la expansión de historia. Si la opción del shell histverify está activa (vea la descripción de la orden interna shopt), y se está usando readline, las sustituciones de historia no se pasan inmediatamente al analizador del shell. En vez de eso, la línea expandida se vuelve a cargar en el búfer de edición de readline para una modificación posterior. Si se está usando readline y la opción del shell histreedit está activada, una sustitución de historia fallida se volverá a cargar en el búfer de edición de readline para su corrección. La opción -p de la orden interna history se puede emplear para ver qué hará una expansión de historia antes de usarse. La opción -s de la orden interna history se puede emplear para añadir órdenes al final de la lista de historia sin ejecutarlas realmente, de modo que estén disponibles para rellamadas posteriores.

El shell permite el control de los diversos caracteres empleados por el mecanismo de expansión de historia (vea la descripción de histchars arriba en Variables del shell).

  Designadores de eventos

Un designador de evento es una referencia a una entrada de línea de orden en la lista de historia.

!   Comenzar una sustitución de historia, excepto cuando le siga un blanco, salto de línea, = o (.
!n  Referirse a la línea de órdenes número n.
!-n Referirse a la línea de orden en curso menos n.
!!  Referirse a la orden anterior. Esto es lo mismo que `!-1'.
!cadena
    Referirse a la orden más reciente que comience con cadena.
!?cadena[?]
    Referirse a la orden más reciente que contenga cadena. El ? del final puede omitirse si a cadena le sigue inmediatamente un salto de línea.
^cadena1^cadena2^
    Sustitución rápida. Repetir la última orden, reemplazando cadena1 con cadena2. Equivalente a ``!!:s/cadena1/cadena2/'' (vea Modificadores abajo).
!#  La línea de orden entera tecleada hasta ahora.

  Designadores de palabras

Los designadores de palabras se emplean para seleccionar las palabras que se deseen del evento. Un : separa la especificación de evento del designador de palabra. Puede omitirse si el designador de palabra comienza con un ^, $, *, -, o %. Las palabras se numeran desde el principio de la línea, con la primera palabra denotada por 0 (cero). Las palabras se insertan en la línea en curso separadas por espacios simples.

0 (cero)
    La palabra número 0. Para el shell, ésta es la palabra de la orden.
n   La n-sima palabra.
^   El primer argumento. Esto es, la palabra número 1.
$   El último argumento.
%   La palabra que concordaba con la más reciente búsqueda con `?cadena?'.
x-y Un rango de palabras; `-y' abrevia `0-y'.
*   Todas las palabras menos la número cero. Esto es un sinónimo de `1-$'. No es un error emplear * si sólo hay una palabra en el evento; en este caso se devuelve la cadena vacía.
x*  Abreviatura de x-$.
x-  Abrevia x-$ como x*, pero omite la última palabra.

Si se suministra un designador de palabra sin una especificación de evento, se usa la orden anterior como el evento.

  Modificadores

Tras el designador opcional de palabra, puede haber una secuencia de uno o más de los siguientes modificadores, precedido cada uno por un `:'.

h   Quitar un componente final de nombre de fichero, dejando sólo la parte izquierda.
t   Quitar todos los primeros componentes de un nombre de fichero, dejando la última parte.
r   Quitar un sufijo final de la forma .xxx, dejando el nombre base.
e   Quitar todo salvo el sufijo final.
p   Mostrar la nueva orden pero no ejecutarla.
q   Entrecomillar las palabras sustituidas, escapando de posteriores sustituciones.
x   Entrecomillar las palabras sustituidas como con q, pero romper entre palabras en los blancos y saltos de línea.
s/viejo/nuevo/
    Substituir nuevo por la primera ocurrencia de viejo en la línea de evento. Se puede emplear cualquier delimitador en vez de /. El delimitador final es opcional si es el último carácter de la línea de evento. El delimitador puede entrecomillarse en viejo y nuevo con una sola barra inclinada inversa. Si & aparece en nuevo, se reemplaza por viejo. Una sola barra inversa protegerá el &. Si viejo está vacío, se pone al último viejo substituido, o, si no tuvo lugar ninguna sustitución de historia previa, a la última cadena en una búsqueda del tipo !?cadena[?].
&   Repetir la sustitución anterior.
g   Hace que los cambios se apliquen sobre la línea entera de evento. Esto se emplea en conjunción con `:s' (p.ej., `:gs/viejo/nuevo/') o `:&'. Si se usa con `:s', cualquier delimitador se puede utilizar en lugar de /, y el delimitador final es opcional si es el último carácter de la linea de evento.

ÓRDENES INTERNAS DEL SHELL

A menos que se diga otra cosa, cada orden interna documentada en esta sección que acepte opciones precedidas por - también acepta -- para significar el final de las opciones.

: [argumentos]
    Sin efecto; la orden no hace nada más que expandir argumentos y realizar cualquier redirección que se haya especificado. Se devuelve un código de salida cero.

.  nombre-fichero [argumentos]
source nombre-fichero [argumentos]
    Lee y ejecuta órdenes desde nombre-fichero en el entorno actual del shell y devuelve el estado de salida de la última orden ejecutada desde nombre-fichero. Si nombre-fichero no contiene una barra inclinada, se usan los nombres de fichero en PATH para encontrar el directorio que contenga a nombre-fichero. El fichero que se busca en PATH no necesita ser ejecutable. Se busca en el directorio de trabajo si no se encontró el fichero en PATH. Si la opción sourcepath de la orden interna shopt está desactivada, la búsqueda en PATH no se realiza. Si se suministran argumentos, se convierten en los parámetros posicionales cuando se ejecuta nombre-fichero. Si no, los parámetros posicionales permanecen inalterados. El estado de retorno es el de la última orden de dentro del guión (0 si no se ejecutó ninguna orden), y `falso' si nombre-fichero no se encontró o no se pudo leer.

alias [-p] [nombre[=valor] ...]
    Alias sin argumentos o con la opción -p muestra la lista de alias en la forma alias nombre=valor en la salida estándar. Cuando se dan argumentos, se define un alias para cada nombre cuyo valor se da. Un espacio extra tras valor hace que en la siguiente palabra se realice la sustitución de alias cuando el alias se expande. Para cada nombre en la lista de argumentos para el que no se suministre un valor, se muestran el nombre y el valor del alias. Alias devuelve `verdad' a menos que se dé un nombre para el que no se haya definido un alias.

bg [espectrab]
    Reanuda el trabajo suspendido espectrab en segundo plano, como si se hubiera arrancado con &. Si espectrab no está presente, se emplea la noción que tiene el shell del trabajo en curso. bg espectrab devuelve 0 a menos que se ejecute cuando el control de trabajos esté deshabilitado, o cuando se ejecute con el control de trabajos habilitado si espectrab no se encontró, o cuando se hubo arrancado sin control de trabajos.

bind [-m mapatecl] [-lpsvPSV]
bind [-m mapatecl] [-q función] [-u función] [-r sectecl]
bind [-m mapatecl] -f nombre-fichero
bind [-m mapatecl] sectecl:nombre-función
    Muestra las asociaciones actuales de readline de teclas y funciones, o asocia una secuencia de teclas a una función o macro de readline. La sintaxis aceptada es idéntica a la de .inputrc, pero cada asociación debe pasarse como un argumento separado; p.ej., '"\C-x\C-r": re-read-init-file'. Las opciones, si se dan, tienen los siguientes significados:
    -m mapatecl
        Usar mapatecl como el mapa de teclado que va a verse afectado por subsiguientes asociaciones. Los nombres aceptables de mapatecl son emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-command y vi-insert. vi equivale a vi-command; emacs es equivalente a emacs-standard.
    -l  Lista los nombres de todas las funciones de readline.
    -p  Muestra los nombres de funciones de readline de tal forma que puedan volver a ser leídas.
    -P  Lista los nombres de funciones de readline actuales y las asociaciones.
    -v  Muestra los nombres de variables de readline y los valores de tal manera que puedan volver a ser leídas.
    -V  Lista los nombres de variables de readline actuales y los valores.
    -s  Muestra las secuencias de teclas de readline asociadas a macros y las cadenas correspondientes de tal manera que puedan ser leídas de nuevo.
    -S  Muestra las secuencias de teclas de readline asociadas a macros y las cadenas de caracteres correspondientes.
    -f nombre-fichero
        Lee las asociaciones de teclas desde nombre-fichero.
    -q función
        Pregunta qué teclas llaman a la función especificada.
    -u función
        Desenlaza todas las teclas asociadas a la función nombrada.
    -r sectecl
        Borra cualquier asociación actual de sectecl.

    El valor devuelto es 0 a menos que se dé una opción no reconocida o que ocurra un error.

break [n]
    Sale de un bucle for, while, until, o select. Si se especifica n, sale de n niveles. n debe ser ≥ 1. Si n es mayor que el número de bucles, se sale de todos. El valor devuelto es 0 a menos que el shell no esté ejecutando un bucle cuando se ejecute break.

builtin orden-interna [argumentos]
    Ejecuta la orden interna del shell especificada, pasándole los argumentos, y devuelve su estado de salida. Esto es útil cuando se define una función cuyo nombre es el mismo que una orden interna del shell, reteniendo la funcionalidad de esa orden interna dentro de la función. Por ejemplo, la orden interna cd se puede redefinir normalmente de esta manera. El estado de salida es `falso' si orden-interna no es una orden incorporada del shell.

cd [-LP] [dir]
    Cambia el directorio de trabajo en curso a dir. La variable HOME contiene el nombre del directorio predeterminado dir. La variable CDPATH define el camino de búsqueda del directorio que contenga dir. Los nombres de directorios alternativos en CDPATH se separan por dos puntos (:). Un nombre de directorio vacío en CDPATH es lo mismo que el directorio de trabajo en curso, o sea, ``.''. Si dir comienza con una barra inclinada (/), entonces CDPATH no se usa. La opción -P dice que se va a emplear la estructura física de directorios en vez de seguir enlaces simbólicos (vea también la opción -P de la orden interna set); la opción -L hace que se sigan siempre los enlaces simbólicos. El argumento - es equivalente a $OLDPWD. El valor de retorno es `verdad' si el directorio de trabajo se cambió con éxito; `falso' en otro caso.

command [-pVv] orden [arg ...]
    Ejecuta orden con args suprimiendo la búsqueda normal de funciones del shell. Sólo se ejecutarán órdenes incorporadas en el shell o programas encontrados en la variable PATH. Si se da la opción -p, se busca la orden empleándose un valor predeterminado para PATH que garantiza encontrar todas las utilidades estándar del sistema. Si se da la opción -V o la -v, se muestra una descripción de orden. La opción -v muestra una sola palabra que indica la orden o nombre de fichero ejecutable empleado para la llamada a orden; la opción -V produce una descripción algo más prolija. Si se dan las opciones -V o -v, el estado de salida es 0 si orden se encontró, y 1 si no. Si no se da ninguna de las dos opciones y ocurrió un error u orden no se encontró, el estado de salida es 127. Si no, el estado de salida de command es el estado de salida de orden.

continue [n]
    Reanuda la siguiente iteración del bucle for, while, until, o select donde estamos. Si se especifica n, la reanudación es en el n-simo bucle que nos rodea. n debe ser ≥ 1. Si n es mayor que el número de bucles que nos rodean, se reanuda el bucle más exterior (el de ``más alto nivel''). El valor de retorno es 0 a menos que el shell no esté ejecutando un bucle cuando se ejecute continue.

declare [-afFirx] [-p] [nombre[=valor]]
typeset [-afFirx] [-p] [nombre[=valor]]
    Declaran variables o les dan atributos. Si no se dan nombres, entonces muestran los valores de las variables. La opción -p mostrará los atributos y valores de cada nombre. Cuando se emplee -p, otras opciones que se hayan dado no se tienen en cuenta. La opción -F inhibe la presentación de las definiciones de funciones; sólo se muestran sus nombres y atributos. La opción -F implica -f. Se pueden emplear las siguientes opciones para restringir la salida a variables con el atributo especificado o para dar atributos a variables:
    -a  Cada nombre es una variable vector (vea Vectores arriba).
    -f  Usar solamente nombres de funciones.
    -i  La variable se trata como un entero; se realiza la evaluación aritmética (vea EVALUACIÓN ARITMÉTICA) cuando a la variable se le asigne un valor.
    -r  Hace que nombres sean de lectura exclusiva. A estos nombres no se les pueden asignar valores por medio de subsiguientes asignaciones, ni se puede anular su definición con unset.
    -x  Marca nombres para la exportación a órdenes subsecuentes a través del entorno.

    Usar `+' en vez de `-' desactiva el atributo en vez de activarlo, con la excepción de que no puede emplearse +a para destruir una variable vector. Cuando se usa en una función, hace local cada nombre, como con la orden interna local. El valor de retorno es 0 a menos que se encuentre una opción inválida, se intente definir una función utilizando "-f fuu=bar", se intente asignar un valor a una variable de lectura exclusiva, se intente asignar un valor a una variable vector sin emplear la sintaxis de asignación compuesta (vea Vectores arriba), uno de los nombres no sea un nombre válido de variable del shell, se intente desactivar el estado de lectura exclusiva para una variable de sólo lectura, se intente desactivar el estado de vector para una variable vector, o se intente mostrar una función no existente con -f.

dirs [-clpv] [+n] [-n]
    Sin opciones, muestra la lista de directorios actualmente recordados. La forma predeterminada de mostrarlos es en una sola línea con los nombres de directorios separados por espacios. Los directorios se añaden a la lista (en realidad, una pila) con la orden pushd; la orden popd los quita de la pila.
    +n  Muestra la n-sima entrada contando desde la izquierda de la lista mostrada por dirs cuando se llama sin opciones, empezando por cero.
    -n  Muestra la n-sima entrada contando desde la derecha de la lista mostrada por dirs cuando se llama sin opciones, empezando por cero.
    -c  Limpia la pila de directorios borrando todas las entradas.
    -l  Produce un listado más largo; el formato predeterminado de listado emplea una tilde de la eñe para señalar el directorio inicial de trabajo (el "hogar").
    -p  Muestra la pila de directorios con una entrada por cada línea.
    -v  Muestra la pila de directorios con una entrada por línea, prefijando cada entrada con su índice en la pila.

    El valor de retorno es 0 a menos que se dé una opción inválida o que n indexe más allá del final de la pila de directorios.

disown [-ar] [-h] [espectrab ...]
    Sin opciones, cada espectrab se quita de la tabla de trabajos activos. Si se da la opción -h, cada espectrab no se quita de la tabla, sino que se marca de manera que no se le enviará la señal SIGHUP si el shell recibe una señal SIGHUP. Si no hay ningún espectrab presente, y ni se dan las opciones -a ni -r, se utiliza el trabajo en curso. Si no se suministra espectrab, la opción -a significa quitar o marcar todos los trabajos; la opción -r sin un argumento espectrab restringe la operación a los trabajos en ejecución. El valor de retorno es 0 a menos que espectrab no se refiera a un trabajo válido.

echo [-neE] [arg ...]
    Repite los args, separados por espacios, seguidos por un salto de línea. El estado de retorno es siempre 0. Si se especifica -n, se suprime el salto de línea final. Si se da la opción -e, se activa la interpretación de los siguientes caracteres de escape (con barra inversa). La opción -E desactiva la interpretación de estos caracteres de escape, incluso en sistemas donde se interpreten de forma predeterminada. echo no interpreta -- como el fin de las opciones. echo interpreta las siguientes secuencias de escape:
    \a  alerta (pito)
    \b  espacio atrás
    \c  suprime el salto de línea final
    \e  un carácter Escape
    \f  salto de página
    \n  nueva línea
    \r  retorno de carro
    \t  tabulador horizontal
    \v  tabulador vertical
    \\  barra inclinada invertida
    \nnn
        el carácter cuyo código es el valor octal nnn (de uno a tres dígitos)
    \xnnn
        el carácter cuyo código es el valor hexadecimal nnn (de uno a tres dígitos)

enable [-adnps] [-f nombre-fichero] [nombre ...]
    Activa y desactiva órdenes internas incorporadas en el shell. Desactivar una orden incorporada en el shell permite que un programa cuya imagen ejecutable esté en el disco con el mismo nombre, se ejecute sin tener que especificar un camino completo, aun cuando el shell normalmente busca las órdenes internas antes que las órdenes externas en disco. Si se da -n, cada nombre se desactiva; si no, nombres se activan. Por ejemplo, para emplear el programa binario test encontrado en el PATH en vez de la versión incorporada en el shell, ejecute enable -n test. La opción -f significa cargar la nueva orden incorporada nombre desde el objeto compartido nombre-fichero, en sistemas que admiten la carga dinámica. La opción -d borrará una orden interna cargada previamente con -f. Si no se dan argumentos nombre, o si se da la opción -p, se muestra una lista de órdenes internas del shell. Sin ninguna opción más, la lista consiste en todas las órdenes internas activas. Si se da -n, sólo se muestran las órdenes desactivadas. Si se da -a, la lista impresa incluye todas las órdenes internas, con una indicación en cada una de si está activada o no. Si se da -s, la salida se restringe a las órdenes internas especiales de POSIX. El valor de retorno es 0 a menos que un nombre no sea una orden interna del shell o que haya un problema cargando una nueva orden incorporada desde un objeto compartido.

eval [arg ...]
    Los args se leen y concatenan juntos para formar una sola orden. Entonces el shell lee y ejecuta esta orden, y su estado de salida se devuelve como el valor de eval. Si no hay args, o solamente argumentos vacíos, eval devuelve 0.

exec [-cl] [-a nombre] [orden [argumentos]]
    Si se especifica orden, reemplaza al shell. No se crea ningún proceso nuevo. Los argumentos se convierten en los argumentos de orden. Si se da la opción -l, el shell pone un guión en el argumento número cero pasado a orden. Esto es lo que hace login(1). La opción -c hace que orden se ejecute con un entorno vacío. Si se da -a , el shell pasa nombre como el argumento número cero de la orden ejecutada. Si orden no puede ejecutarse por alguna razón, un shell no interactivo se acaba, a menos que se haya activado la opción del shell execfail, en cuyo caso devuelve `fallo'. Un shell interactivo devuelve `fallo' si el fichero no puede ejecutarse. Si orden no se especifica, cualquier redirección tiene efecto en el shell en curso, y el estado devuelto es 0. Si hay un error de redirección, el estado de retorno es 1.

exit [n]
    Hace que el shell acabe con un estado de valor n. Si n se omite, el valor de salida es el de la última orden ejecutada. Se ejecuta una trampa puesta en EXIT antes de que el shell termine.

export [-fn] [nombre[=palabra]] ...
export -p
    Los nombres suministrados se marcan para exportación automática al entorno de órdenes que se ejecuten de ahí en adelante. Si la opción -f se da, los nombres se referirán a funciones. Si no se dan nombres, o si se da la opción -p, se muestra una lista de todos los nombres que están exportados en este shell. La opción -n hace que la propiedad de exportación se quite de las variables nombradas; o sea, que se quiten del entorno. export devuelve un estado de salida de 0 a menos que se encuentre una opción inválida, uno de los nombres no sea un nombre válido de variable del shell, o que se dé -f no siendo nombre una función.

fc [-e editor] [-nlr] [primero] [último]
fc -s [pat=rep] [ord]
    Corrige orden (Fix Command). En la primera forma, se selecciona un rango de órdenes desde primero hasta último de la lista de historia. Primero y último pueden especificarse como una cadena de caracteres (para localizar la última orden que empezara con esa cadena) o como un número (un índice en la lista de historia, donde un número negativo se emplea como un desplazamiento a partir del número de orden actual). Si no se da último, se pone a la orden en curso para un listado (de forma que fc -l -10 muestra las 10 últimas órdenes) o a primero en otro caso. Si no se especifica primero, se pone a la orden previa para una edición y a -16 para un listado.

    La opción -n suprime los números de orden en un listado. La opción -r invierte el orden de los mandatos. Si se da la opción -l , las órdenes se listan en la salida estándar. Si no, se llama al editor dado por editor en un fichero conteniendo esas órdenes. Si no se da editor, se emplea el valor de la variable FCEDIT, o el valor de EDITOR si FCEDIT no está definido. Si no está definida ni una variable ni otra, vi es el editor que se empleará. Cuando la edición se haya completado, las órdenes editadas se muestran y ejecutan.

    En la segunda forma, orden se re-ejecuta tras que cada instancia de pat se reemplace por rep. Un alias de utilidad para emplear con esto es ``r=fc -s'', de tal modo que al teclear ``r cc'' se ejecute la última orden que empezara con ``cc'' y que al teclear ``r'' se re-ejecute la última orden.

    Si se usa la primera forma, el valor de retorno es 0 a menos que se encuentre una opción inválida o que primero o último especifiquen líneas de historia fuera de rango. Si se suministra la opción -e, el valor de retorno es el de la última orden ejecutada, o `fallo' si ocurre un error con el fichero temporal de órdenes. Si se emplea la segunda forma, el estado de retorno es de la orden reejecutada, a menos que ord no especifique una línea válida de historia, en cuyo caso fc devuelve `fallo'.

fg [espectrab]
    Reanuda espectrab en primer plano, y lo hace ser el trabajo en curso. Si espectrab no está presente, se usa la noción que tiene el shell del trabajo en curso. El valor de retorno es el de la orden puesta en primer plano, o `fallo' si se ejecuta fg cuando el control de trabajos está desactivado o, cuando se ejecuta con el control de trabajos activado, si espectrab no especifica un trabajo válido o espectrab se refiere a una trabajo que se arrancó sin control de trabajos.

getopts cadenaopcs nombre [args]
    getopts se usa en procedimientos del shell para analizar los parámetros posicionales. cadenaopcs contiene las letras de opción que se reconocerán; si a una letra le sigue un signo de dos puntos, se espera que la opción tenga un argumento, que debería estar separado de ella por espacio en blanco. Cada vez que se llama, getopts pone la siguiente opción en la variable del shell nombre, inicializando nombre si no existe, y el índice del siguiente argumento a ser procesado en la variable OPTIND. OPTIND se inicializa a 1 cada vez que se llama al shell o al guión del shell. Cuando una opción requiera un argumento, getopts pone ese argumento en la variable OPTARG. El shell no pone a cero OPTIND automáticamente; debe ser puesto a cero manualmente entre llamadas múltiples a getopts dentro de la misma llamada al shell si hubiera que usar un nuevo conjunto de parámetros.

    Cuando se encuentra el fin de las opciones, getopts sale con un valor de retorno mayor que cero. OPTIND se pone al índice del primer argumento que no es una opción, y nombre se pone a "?".

    getopts normalmente analiza los parámetros posicionales, pero si se dan más argumentos en args, getopts analiza aquéllos en su lugar.

    getopts puede informar de errores de dos maneras. Si el primer carácter de optstring es dos puntos, se emplea un informe de error silencioso. En un modo normal de operación se muestran mensajes de diagnósticos cuando se encuentran opciones inválidas o faltan argumentos de opciones que los requieran. Si la variable OPTERR se pone a 0, no se mostrará ningún mensaje de error, incluso si el primer carácter de optstring no es dos puntos.

    Si se ve una opción inválida, getopts pone ? en nombre y, si no estamos en el modo silencioso, se muestra un mensaje de error y se anula OPTARG. Si getopts es silencioso, el carácter de opción encontrado se pone en OPTARG y no se muestra ningún mensaje de diagnóstico.

    Si no se encuentra un argumento necesario, y getopts no es silencioso, se pone un signo de cierre de interrogación (?) en nombre, OPTARG se anula, y se muestra un mensaje de diagnóstico. Si getopts es silencioso, entonces se pone un signo de dos puntos (:) en nombre y OPTARG toma el valor del carácter de opción encontrado.

    getopts devuelve `verdad' si una opción, especificada o no, se encuentra. Devuelve `falso' si se encuentra el final de las opciones o si ocurre un error.

hash [-r] [-p nombre-fichero] [nombre]
    Para cada nombre, se determina el nombre completo del fichero correspondiente buscando los directorios en $PATH y dicho nombre completo se registra. Si se da la opción -p no se busca en el PATH, y se emplea en su lugar nombre-fichero como el nombre completo de fichero para la orden. La opción -r hace que el shell se olvide de todas las localizaciones registradas. Si no se dan argumentos, se muestra información acerca de las órdenes recordadas. El estado de salida es `verdad' a menos que un nombre no se encuentre o se dé una opción inválida.

help [patrón]
    Muestra información de ayuda sobre las órdenes internas. Si se especifica patrón, help da ayuda detallada sobre todas las órdenes que concuerden con patrón; si no, se muestra ayuda para todas las órdenes internas y estructuras de control del shell. El estado de retorno es 0 a menos que ninguna orden concuerde con patrón.

history [-c] [n]
history -anrw [nombre-fichero]
history -p arg [arg ...]
history -s arg [arg ...]
    Sin opciones, muestra la lista de historia de órdenes con números de línea. Las líneas marcadas con un * han sido modificadas. Un argumento de n lista solamente las últimas n líneas. Si nombre-fichero se da, se emplea como el nombre del fichero de historia; si no, se usa el valor de HISTFILE. Las opciones, si se dan, tienen los siguientes significados:
    -a  Añade las líneas de historia ``nuevas'' (las introducidas desde el inicio de la sesión de bash en curso) al fichero de historia.
    -n  Lee las líneas de historia que aún no han sido leídas del fichero de historia y las mete en la lista de historia actual. Éstas son las líneas añadidas al fichero de historia desde el comienzo de la sesión de bash actual.
    -r  Lee los contenidos del fichero de historia y los usa como la historia en curso.
    -w  Escribe la historia en curso en el fichero de historia, sobreescribiendo sus contenidos.
    -c  Limpia la lista de historia borrando todas las entradas.
    -p  Realiza la sustitución de historia de los siguientes args y muestra el resultado en la salida estándar. No almacena los resultados en el fichero de historia. Cada arg debe protegerse para deshabilitar la expansión de historia normal.
    -s  Almacena los args en la lista de historia como una sola entrada. La última orden en la lista de historia se elimina antes de que se añadan los args.

    El valor de retorno es 0 a menos que se encuentre una opción inválida o que ocurra un error mientras se lee o se escribe el fichero de historia.

jobs [-lnprs] [ espectrab ... ]
jobs -x orden [ args ... ]
    La primera forma lista los trabajos activos. Las opciones tienen los significados siguientes:
    -l  Lista PIDs además de la información normal.
    -p  Lista solamente el PID del líder del grupo de proceso del trabajo.
    -n  Muestra información solamente sobre trabajos que han cambiado de estado desde que se notificó al usuario por última vez de su estado.
    -r  Restringe la salida a los trabajos en ejecución.
    -s  Restringe la salida a los trabajos parados.

    Si se da espectrab, la salida se restringe a la información sobre ese trabajo. El estado de retorno es cero a menos que se encuentre una opción inválida o se suministre un espectrab inválido.

    Si se da la opción -x, jobs reemplaza cualquier espectrab encontrado en orden o args con el ID de grupo de proceso correspondiente, y ejecuta orden pasándole args, devolviendo su estado de salida.

kill [-s nombre-señal | -n numseñal | -nombre-señal] [pid | espectrab] ...
kill -l [nombre-señal | status_salida]
    Envía la señal especificada por nombre-señal o numseñal a los procesos nombrados por pid o espectrab. nombre-señal es o bien un nombre de señal como SIGKILL o un número de señal; numseñal es un número de señal. Si nombre-señal es un nombre de señal, éste puede darse con o sin el prefijo SIG. Si nombre-señal no está presente, entonces se supone SIGTERM. Un argumento de -l lista los nombres de señales. Si se suministran más argumentos cuando se da -l, se listan los nombres de las señales correspondientes a los argumentos, y el estado de retorno es 0. El argumento status_salida de -l es un número que especifica o bien un número de señal o el estado de salida de un proceso terminado por una señal. kill devuelve ``verdad'' si por lo menos se envió con éxito una señal, o ``falso'' si ocurrió un error o se encontró una opción inválida.

let arg [arg ...]
    Cada arg es una expresión aritmética a ser evaluada (vea EVALUACIÓN ARITMÉTICA). Si el último arg se evalúa a 0, let devuelve 1; si no, devuelve 0.

local [nombre[=valor] ...]
    Para cada argumento, se crea una variable local llamada nombre, y se le asigna el valor valor. Cuando local se emplea dentro de una función, hace que la variable nombre tenga una visibilidad restringida a esa función y sus hijas. Sin operandos, local escribe en la salida estándar una lista de las variables locales. Es un error emplear local fuera de una función. El estado de retorno es 0 a menos que local se use fuera de una función, o se dé un nombre inválido.

logout
    Hace terminar un shell de entrada.

popd [-n] [+n] [-n]
    Quita entradas de la pila de directorios. Sin argumentos, desapila el directorio de la cima de la pila, y realiza un cd al nuevo directorio de la pila. Los argumentos, si se suministran, tienen los siguientes significados:
    +n  Quita la n-sima entrada contando desde la izquierda de la lista mostrada por dirs, empezando por cero. Por ejemplo: ``popd +0'' quita el primer directorio, ``popd +1'' el segundo.
    -n  Quita la n-sima entrada contando desde la derecha de la lista mostrada por dirs, empezando por cero. Por ejemplo: ``popd -0'' quita el último directorio, ``popd -1'' el penúltimo.
    -n  Suprime el normal cambio de directorio cuando se desapilan directorios, de forma que solamente la pila se manipula.

    Si la orden popd es exitosa, también se realiza un dirs, y el estado de retorno es 0. popd devuelve `falso' si se encuentra una opción inválida, la pila de directorios está vacía, se especifica una entrada de la pila de directorios no existente, o falla el cambio de directorio.

printf formato [argumentos]
    Escribe los argumentos formateados en la salida estándar bajo el control del formato. El formato es una cadena de caracteres que contiene tres tipos de objetos: caracteres normales, que simplemente se copian en la salida estándar, caracteres de secuencias de escape, que se convierten y copian en la salida estándar, y especificaciones de formato, cada una de las cuales causa la impresión del siguiente argumento sucesivo de una determinada manera. Además de los formatos estándares normales de printf(1), %b hace que printf expanda las secuencias de escape de barras inversas en el correspondiente argumento, y %q causa que printf muestre en la salida el argumento correspondiente en un formato tal que pueda ser reutilizado como entrada para el shell.

    El formato se reutiliza tanto como sea necesario para consumir todos los argumentos. Si el formato requiere más argumentos que los que se suministran, las especificaciones de formato extra se comportan como si se hubiera dado un valor cero o una cadena vacía, según lo apropiado.

pushd [-n] [dir]
pushd [-n] [+n] [-n]
    Añade un directorio a la cima de la pila de directorios, o rota la pila, haciendo que el directorio de trabajo en curso sea la nueva cima de la pila. Sin argumentos, intercambia los dos directorios de más arriba y devuelve 0, a menos que la pila de directorios esté vacía. Los argumentos, si se suministran, tienen los siguientes significados:
    +n  Rota la pila de forma que el n-simo directorio (contando desde la izquierda de la lista mostrada por dirs, empezando por cero) esté en la cima.
    -n  Rota la pila de forma que el n-simo directorio (contando desde la derecha de la lista mostrada por dirs, empezando por cero) esté en la cima.
    -n  Suprime el cambio normal de directorio cuando se añaden directorios a la pila, de forma que solamente se manipula la pila.
    dir Añade dir a la pila de directorios en la cima, haciéndolo el nuevo directorio de trabajo.

    Si la orden pushd acaba con éxito, se realiza un dirs también. Si se emplea la primera forma, pushd devuelve 0 a menos que falle el cambio a dir. Con la segunda forma, pushd devuelve 0 a menos que la pila de directorios esté vacía, que se especifique un elemento de la pila de directorios inexistente, o que el cambio de directorio falle.

pwd [-LP]
    Muestra el nombre de fichero absoluto del directorio de trabajo en curso. El nombre de fichero mostrado no contiene enlaces simbólicos si se da la opción -P o está puesta la opción -o physical de la orden interna set. Si se usa la opción -L, los enlaces simbólicos se siguen. El estado de retorno es 0 a menos que ocurra un error mientras se lea el nombre del directorio actual o se dé una opción inválida.

read [-er] [-a array] [-p prompt] [nombre ...]
    Se lee una línea desde la entrada estándar, y la primera palabra se asigna al primer nombre, la segunda palabra al segundo nombre, y así sucesivamente, con las palabras que sobren y sus separadores intervinientes asignadas al último nombre. Si hay menos palabras leídas de la entrada estándar que nombres, a los sobrantes se les asignan valores vacíos. Se emplean los caracteres en IFS para dividir la línea en palabras. Las opciones, si se dan, tienen los siguientes significados:
    -r  Un par formado por una barra inclinada inversa y un salto de línea a continuación sí es tenido en cuenta, y la barra inversa se considera parte de la línea.
    -p  Muestra prompt, sin un salto de línea al final, antes de intentar leer nada de la entrada. El indicador se muestra solamente si la entrada viene de una terminal.
    -a  Las palabras se asignan secuencialmente a los elementos de la variable vector array, empezando por 0. Se anula la posible previa definición de array antes de que se asignen nuevos valores. Otros argumentos nombre no se tienen en consideración.
    -e  Si la entrada estándar viene de una terminal, se emplea readline (vea READLINE arriba) para obtener la línea.

    Si no se suministran nombres, la línea leída se asigna a la variable REPLY. El código de retorno es cero, a menos que se llegue al fin de la entrada.

readonly [-apf] [nombre ...]
    Los nombres dados se marcan como de lectura exclusiva; los valores de estos nombres no pueden cambiarse por posteriores asignaciones. Si se da la opción -f, se marcan así las funciones correspondientes a los nombres. La opción -a restringe las variables a vectores. Si no se da ningún argumento nombre, o si se da la opción -p, se muestra una lista de todos los nombres de lectura exclusiva. La opción -p hace que la salida se muestre en un formato que puede ser reutilizado como entrada. El estado de retorno es 0 a menos que se encuentre una opción inválida, uno de los nombres no sea un nombre válido de variable del shell, o se dé -f con un nombre que no es una función.

return [n]
    Hace que una función acabe y devuelva el valor especificado por n. Si n se omite, el estado devuelto es el de la última orden ejecutada en el cuerpo de la función. Si se emplea fuera de una función, pero durante la ejecución de un guión por la orden . (source), hace que el shell pare la ejecución de ese guión y devuelva o n o el estado de salida de la última orden ejecutada dentro del guión como el estado de salida del guión. Si se emplea fuera de una función y no durante la ejecución de un guión por ., el estado de salida es `falso'.

set [--abefhkmnptuvxBCHP] [-o opción] [arg ...]
    Sin opciones, se muestra el nombre y valor de cada variable del shell en un formato que puede ser reutilizado como entrada. La salida se clasifica según la localización en curso. Cuando se dan opciones, se establecen o quitan atributos del shell. Cualesquier argumentos que queden tras que se procesen las opciones se tratan como valores para los parámetros posicionales y se asignan, en orden, a $1, $2, ... $n. Las opciones, si se especifican, tienen los siguientes significados:
    -a  Automáticamente marca variables, que se modifiquen o creen, para exportación al entorno de las órdenes subsiguientes.
    -b  Informa del estado de los trabajos en segundo plano terminados inmediatamente, en vez de esperar a justo antes de mostrar el siguiente indicador primario. Esto sólo es efectivo cuando el control de trabajos está habilitado.
    -e  Sale inmediatamente si una orden simple (vea GRAMÁTICA DEL SHELL arriba) acaba con un estado distinto de cero. El shell no acaba si la orden que falle es parte de un bucle until o while, parte de una sentencia if, parte de una lista && o ||, o si el valor devuelto por la orden se invierte mediante !.
    -f  Deshabilita la expansión de nombres de caminos.
    -h  Recuerda la localización de órdenes una vez que se buscan para la 1ª ejecución. Esto está habilitado de forma predeterminada.
    -k  Todos los argumentos en forma de sentencias de asignación se ponen en el entorno para una orden, no solamente aquéllos que precedan al nombre de la orden.
    -m  Modo de monitor. Se habilita el control de trabajos. Esta opción está puesta de forma predeterminada para shells interactivos en sistemas que lo admitan (vea CONTROL DE TRABAJOS arriba). Los procesos en segundo plano se ejecutan en un grupo de proceso separado, y se imprime cuando se completan una línea conteniendo su estado de salida.
    -n  Lee órdenes pero no las ejecuta. Esto puede emplearse para comprobar si un guión del shell tiene errores de sintaxis. Para shells interactivos esta opción no tiene efecto.
    -o nombre-opción
        El nombre-opción puede ser uno de los siguientes:
        allexport
            Lo miso que -a.
        braceexpand
            Lo miso que -B.
        emacs
            Emplea una interfaz de edición de líneas de órdenes al estilo de emacs. Esto está activo de forma predeterminada cuando el shell es interactivo, a menos que se haya arrancado con la opción --noediting.
        errexit
            Lo mismo que -e.
        hashall
            Lo mismo que -h.
        histexpand
            Lo mismo que -H.
        history
            Habilita la historia de órdenes, según se describió arriba bajo HISTORIA. Esta opción está habilitada por omisión en shells interactivos.
        ignoreeof
            El efecto es como si se hubiera ejecutado la orden del shell IGNOREEOF=10 (vea Variables del shell arriba).
        keyword
            Lo mismo que -k.
        monitor
            Lo mismo que -m.
        noclobber
            Lo mismo que -C.
        noexec
            Lo mismo que -n.
        noglob
            Lo mismo que -f.
        notify
            Lo mismo que -b.
        nounset
            Lo mismo que -u.
        onecmd
            Lo mismo que -t.
        physical
            Lo mismo que -P.
        posix
            Cambia el comportamiento de bash donde la operación predeterminada difiera del estándar POSIX 1003.2, de forma que se siga éste.
        privileged
            Lo mismo que -p.
        verbose
            Lo mismo que -v.
        vi  Emplea una interfaz de edición de la línea de órdenes al estilo de vi.
        xtrace
            Lo mismo que -x.

        Si se da -o sin ningún nombre-opción, se muestran los valores de las opciones activas. Si se da +o sin ningún nombre-opción, se muestra en la salida estándar una serie de órdenes set para recrear las opciones según están puestas o no actualmente.
    -p  Activa el modo privilegiado. En este modo, el fichero correspondiente a $ENV no es procesado, las funciones del shell no se heredan desde el entorno,y la variable SHELLOPTS, si aparece en el entorno, no se tiene en consideración. Esta opción se activa automáticamente en el arranque si el identificador efectivo del usuario (o grupo) no es igual al identificador real del usuario (o grupo). Desactivar esta opción hace que los identificadores efectivos de usuario y grupo se pongan con los valores de los identificadores reales de usuario y grupo respectivamente.
    -t  Sale tras leer y ejecutar una sola orden.
    -u  Trata las variables no definidas como un error cuando realiza la expansión de parámetros. Si la expansión se intenta hacer sobre una variable no definida, el shell muestra un mensaje de error y, si no es interactivo, sale con un estado distinto de cero.
    -v  Repite en la salida las líneas de entrada del shell tras leerlas.
    -x  Tras expandir cada orden simple, muestra el valor expandido de PS4, seguido por la orden y sus argumentos expandidos.
    -B  El shell realiza la expansión de llaves (vea Expansión de llaves arriba). Esto está activado de forma predeterminada.
    -C  Si está activo, bash no sobreescribe un fichero existente con los operadores de redirección >, >&, ni <>. Esto puede cambiarse cuando se crean ficheros de salida mediante el empleo del operador >| en vez de >.
    -H  Permite la sustitución de historia mediante !. Esta opción está activada por omisión cuando el shell es interactivo.
    -P  Si está activada, el shell no sigue enlaces simbólicos cuando ejecuta órdenes como cd que cambian el directorio de trabajo. En su lugar emplea la estructura de directorio física. De forma predeterminada, bash sigue la cadena lógica de directorios cuando ejecuta órdenes que cambian el directorio de trabajo.
    --  Si a esta opción no sigue ningún argumento más, entonces los parámetros posicionales se anulan. Si no, los parámetros posicionales se ponen con los valores dados por los args, incluso si alguno de ellos comienza con un -.
    -   Señala el final de las opciones, haciendo que el resto de args se asignen a los parámetros posicionales. Las opciones -x y -v se desactivan. Si no hay más args, los parámetros posicionales permanecen sin cambios.

    Las opciones están desactivadas de forma predeterminada a menos que se diga otra cosa. Usar + en vez de - hace que estas opciones se desactiven. Las opciones también pueden darse como argumentos al llamar al shell. El conjunto de opciones activadas puede examinarse en $-. El estado de retorno es siempre `verdad' a menos que se encuentre una opción inválida.

shift [n]
    Los parámetros posicionales desde n+1 ... se renombran a $1 ... Los parámetros representados por los números desde $# hasta $#-n+1 se anulan. n debe ser un número no negativo menor o igual a $#. Si n es 0, no se cambia ningún parámetro. Si n no se da, se supone 1. Si n es mayor que $#, los parámetros posicionales no se cambian. El estado de retorno es mayor que cero si n es mayor que $# o menor que cero; en otro caso es cero.

shopt [-pqsu] [-o] [nombreopc ...]
    Cambia los valores de variables que controlan un comportamiento determinado opcional del shell. Sin opciones, o con la opción -p, se muestra una lista de todas las opciones disponibles, con una indicación en cada una de si está activa o no. La opción -p hace que la salida se muestre de una forma tal que pueda reutilizarse como entrada. Otras opciones tienen los significados siguientes:
    -s  Activa (set) cada nombreopc.
    -u  Desactiva (unset) cada nombreopc.
    -q  Suprime la salida normal (modo silencioso); el estado de salida indica si el nombreopc está activado o no. Si se dan varios argumentos nombreopc con -q, el estado de salida es cero si todos los nombreopcs están activados; distinto de cero en otro caso.
    -o  Restringe los valores de nombreopc a aquéllos definidos para la opción -o de la orden interna set.

    Si se emplean -s o -u sin argumentos nombreopc, la lista mostrada se limita a aquellas opciones que están activadas o desactivadas, respectivamente. A menos que se diga otra cosa, las opciones de shopt están inactivas (unset) de forma predeterminada.

    El estado de retorno cuando se listan opciones es cero si todos los nombreopcs están activos, distinto de cero en otro caso. Cuando se activan o desactivan opciones, el estado de salida es cero a menos que un nombreopc no sea una opción del shell válida.

    La lista de las opciones de shopt es:

    cdable_vars
        Si está activa, un argumento de la orden interna cd que no sea un directorio, se supone el nombre de una variable cuyo valor es el directorio al que hay que cambiarse.
    cdspell
        Si está activa, se corregirán pequeños errores que hubiera en la escritura de un componente directorio de una orden cd. Los errores que se buscan se refieren a caracteres transpuestos, un carácter que falte, y un carácter que sobre. Si se encuentra una corrección, se muestra el nombre de fichero corregido y la orden procede. Esta opción sólo se emplea en shells interactivos.
    checkhash
        Si está activa, bash comprueba que una orden encontrada en la tabla de dispersión existe antes de intentar ejecutarlo. Si una orden en la tabla de dispersión ya no existe, se realiza una búsqueda normal en el PATH.
    checkwinsize
        Si está activa, bash comprueba el tamaño de ventana tras cada orden y, si es necesario, actualiza los valores de LINES y COLUMNS.
    cmdhist
        Si está activa, bash intenta guardar todas las líneas de una orden de varias líneas en la misma entrada de historia. Esto permite una re-edición fácil de dichas órdenes.
    dotglob
        Si está activa, bash incluye los nombres de ficheros que comiencen con un `.' en los resultados de la expansión de nombres de caminos.
    execfail
        Si está activa, un shell no interactivo no acabará si no puede ejecutar el fichero especificado como un argumento de la orden interna exec. Un shell interactivo no acaba si exec falla.
    expand_aliases
        Si está activa, los alias se expanden como se describió arriba bajo ALIAS. Esta opción está habilitada de forma predeterminada para shells interactivos.
    extglob
        Si está activa, se habilitan las características de concordancia de patrones extendidas descritas más arriba en Expansión de nombres de camino.
    histappend
        Si está activa, la lista de historia se añade al fichero nombrado según el valor de la variable HISTFILE cuando el shell acaba, en vez de sobreescribir el fichero.
    histreedit
        Si está activa, y readline se está utilizando, se le da al usuario la oportunidad de re-editar la sustitución de historia fallida.
    histverify
        Si está activa, y readline se está utilizando, los resultados de la sustitución de historia no se pasan inmediatamente al analizador del shell. En vez de eso, la línea resultante se carga en el búfer de edición de readline, permitiendo así una modificación posterior.
    hostcomplete
        Si está activa, y readline se está utilizando, bash intentará terminar de escribir un nombre de computador anfitrión cuando se esté completando una palabra que contenga una @ (vea Terminación bajo READLINE arriba). Esto está activado de forma predeterminada.
    huponexit
        Si está activa, bash enviará una señal SIGHUP a todos los trabajos cuando un shell de entrada interactivo finalice.
    interactive_comments
        Si está activa, permite a una palabra que empiece por # hacer que esa palabra y todos los caracteres restantes de esa línea no sean tenidos en cuenta en un shell interactivo (vea COMENTARIOS arriba). Esta opción está habilitada por omisión.
    lithist
        Si está activa, y la opción cmdhist también lo está, las órdenes multi-línea se guardan en la historia con saltos de línea empotrados en vez de emplear como separador el punto y coma, donde sea posible.
    mailwarn
        Si está activa, y a un fichero donde bash está buscando correo nuevo se ha accedido desde la última vez que se buscó, se muestra el mensaje ``The mail in mailfile has been read'', o su equivalente en el idioma local, que en español sería ``El correo en buzón ha sido leído''.
    nocaseglob
        Si está activa, bash busca concordancias de nombres de ficheros sin importar mayúsculas o minúsculas cuando realice la expansión de nombres de caminos (vea Expansión de nombres de caminos arriba).
    nullglob
        Si está activa, bash permite que los patrones que no concuerden con ningún fichero (vea Expansión de nombres de caminos arriba) se expandan a una cadena vacía, en vez de a sí mismos.
    promptvars
        Si está activa, las cadenas de caracteres que sirven de indicadores están sujetas a expansión de variable y parámetro tras ser expandidas como se describió en INDICADORES arriba. Esta opción está activa de forma predeterminada.
    shift_verbose
        Si está activa, la orden interna shift muestra un mensaje de error cuando el número de shift excede al de parámetros posicionales.
    sourcepath
        Si está activa, la orden interna source (.) emplea el valor de PATH para buscar el directorio que contenga al fichero suministrado como argumento. Esta opción está activa por omisión.
suspend [-f]
    Suspende la ejecución de este shell hasta que reciba una señal SIGCONT. La opción -f dice que no hay que protestar si éste es un shell de entrada; simplemente suspenderlo de todas formas. El estado de retorno es 0 a menos que el shell sea de entrada y la opción -f no se haya dado, o si el control de trabajos no está habilitado.
test expr
[ expr ]
    Devuelve un estado de 0 ó 1 dependiendo de la evaluación de la expresión condicional expr. Cada operador y operando debe ser un argumento separado. Las expresiones se componen de las primarias descritas más arriba bajo EXPRESIONES CONDICIONALES.

    Las expresiones se pueden combinar mediante los operadores siguientes, listados en orden decreciente de precedencia.
    ! expr
        Verdad si expr es falsa.
    ( expr )
        Devuelve el valor de expr. Esto puede emplearse para cambiar la precedencia normal de los operadores.
    expr1 -a expr2
        Verdad si tanto expr1 como expr2 son verdad.
    expr1 -o expr2
        Verdad si uno al menos de expr1 o expr2 es verdad.

    test y [ evalúan expresiones condicionales según un conjunto de reglas basadas en el número de argumentos.

    0 argumentos
        La expresión es falsa.
    1 argumento
        La expresión es verdad si y sólo si el argumento no está vacío.
    2 argumentos
        Si el primer argumento es !, la expresión es verdad si y sólo si el segundo argumento es nulo. Si el primer argumento es uno de los operadores condicionales monarios listados arriba en EXPRESIONES CONDICIONALES, la expresión es verdad si el test monario es verdad. Si el primer argumento no es un operador condicional monario válido, la expresión es falsa.
    3 argumentos
        Si el segundo argumento es uno de los operadores condicionales binarios listados arriba en EXPRESIONES CONDICIONALES, el resultado de la expresión es el resultado del test binario empleando el primer y tercer argumentos como operandos. Si el primer argumento es !, el valor es la negación del test de dos argumentos empleando el segundo y tercer argumentos. Si el primer argumento es exactamente ( y el tercer argumento es exactamente ), el resultado es el test de un argumento del segundo argumento. De otro modo, la expresión es falsa. Los operadores -a y -o se consideran como operadores binarios en este caso.
    4 argumentos
        Si el primer argumento es !, el resultado es la negación de la expresión de tres argumentos compuesta por los argumentos restantes. De otra forma, la expresión se analiza y evalúa de acuerdo con la precedencia utilizando las reglas listadas arriba.
    5 ó más argumentos
        La expresión se analiza y evalúa de acuerdo con la precedencia usando las reglas mencionadas arriba.

times
    Muestra los tiempos acumulados de usuario y sistema para el shell y para procesos ejecutados desde él. El estado de retorno es 0.

trap [-lp] [arg] [nombre-señal ...]
    La orden arg va a leerse y ejecutarse cuando el shell reciba la(s) señal(es) especificada(s) por nombre-señal. Si arg está ausente o es -, todas las señales especificadas se reestablecen a sus valores originales (los que tenían cuando se entró en el shell). Si arg es la cadena vacía, la señal especificada por cada nombre-señal no se tiene en cuenta por parte del shell y de las órdenes que se llamen desde él. Si arg es -p entonces se muestran las órdenes de las trampas asociadas con cada nombre-señal. Si no se pasan argumentos o si sólo se da -p, trap muestra la lista de órdenes asociadas con cada número de señal. Cada nombre-señal es o bien un nombre de señal de los definidos en <signal.h>, o un número de señal. Si un nombre-señal es EXIT (0), la orden arg se ejecuta cuando se sale del shell. Si un nombre-señal es DEBUG, la orden arg se ejecuta tras cada orden simple (vea GRAMÁTICA DEL SHELL arriba). La opción -l hace que el shell muestre una lista de nombres de señal y sus números correspondientes. Las señales que no se tienen en cuenta ya cuando se entra en el shell no pueden ser atrapadas ni restablecidas. Las señales atrapadas se reestablecen a sus valores originales en un proceso hijo cuando se crea. El estado de retorno es `falso' si cualquier nombre-señal no es válido; de otro modo, trap devuelve `verdad'.

type [-atp] nombre [nombre ...]
    Sin opciones, indica cómo será interpretado cada nombre si se usa como un nombre de orden. Si se emplea la opción -t, type muestra una de las siguientes cadenas de caracteres: alias, keyword, function, builtin, o file si nombre es respectivamente un alias, una palabra reservada del shell, una función, una orden interna incorporada en el shell, o un fichero ejecutable de disco. Si el nombre no se encuentra, no se muestra nada, y se devuelve un estado de salida de `falso'. Si se emplea la opción -p, type devuelve o bien el nombre del fichero de disco que se ejecutaría si se especificara nombre como un nombre de orden, o bien nada si type -t nombre no devolviera file. Si una orden está en la tabla de dispersión, -p muestra el valor de dicha tabla, no necesariamente el fichero que aparezca primero en PATH. Si se emplea la opción -a, type muestra todos los sitios que contengan un ejecutable llamado nombre. Esto incluye alias y funciones, si y sólo si la opción -p no se ha usado también. La tabla de dispersión de las órdenes no se consulta cuando se emplea -a. type devuelve `verdad' si cualquiera de los argumentos se encuentra, `falso' si no se encuentra ninguno.

ulimit [-SHacdflmnpstuv [límite]]
    Proporciona control sobre los recursos disponibles para el shell y para los procesos arrancados por él, en sistemas que permitan tal control (Linux por ejemplo, y por supuesto). El valor de límite puede ser un número en la unidad especificada para el recurso, o el valor unlimited, o sea, ilimitado. Las opciones -H y -S especifican que el límite para el recurso dado va a ser duro o blando. Un límite duro es aquél que no puede ser aumentado una vez puesto; un límite blando puede incrementarse hasta el valor dado por el límite duro. Si no se especifican ni -H ni -S, se establecen ambos límites. Si límite se omite, se muestran los valores del límite blando del recurso, a menos que se dé la opción -H. Cuando se especifica más de un recurso, se imprime el nombre del límite y la unidad antes del valor. Otras opciones se interpretan como sigue:
    -a  Se informa de todos los límites actuales
    -c  El tamaño máximo de ficheros de volcados de memoria (core)
    -d  El tamaño máximo del segmento de datos de un proceso
    -f  El tamaño máximo de ficheros creados por el shell
    -l  El tamaño máximo que puede ser bloqueado en memoria
    -m  El tamaño del máximo conjunto residente (memoria)
    -n  EL número máximo de descriptores de ficheros abiertos (la mayoría de sistemas no permiten establecer este valor)
    -p  El tamaño de una tubería en bloques de 512 B (esto puede no estar establecido)
    -s  El tamaño máximo de pila
    -t  La máxima cantidad de tiempo de CPU en segundos
    -u  El número máximo de procesos disponibles para un solo usuario
    -v  La máxima cantidad de memoria virtual disponible para el shell

    Si se da límite, es el nuevo valor del recurso especificado (la opción -a es sólo para mostrar los valores). Si no se da ninguna opción, entonces se supone -f. Los valores están en incrementos de 1024 B, excepto para -t, que está en segundos, -p, que está en unidades de bloques de 512 B, y -n y -u, que son valores adimensionales. El estado de retorno es 0 a menos que se encuentre una opción inválida, se dé como límite un argumento no numérico distinto de unlimited, o bien ocurra un error mientras se establece un nuevo límite.

umask [-p] [-S] [modo]
    La máscara de creación de ficheros del usuario se establece a modo. Si modo empieza con un dígito, se interpreta como un número octal; si no, se interpreta como un modo simbólico similar al aceptado por chmod(1). Si modo se omite, o si se da la opción -S, se muestra el valor actual de la máscara. La opción -S hace que la máscara se imprima en forma simbólica; la salida predeterminada es como un número octal. Si se da la opción -p y modo se omite, la salida es de tal forma que puede reutilizarse como entrada. El estado de retorno es 0 si el modo se cambió exitosamente o si no se dio el argumento modo, y `falso' en otra circunstancia.

unalias [-a] [nombre ...]
    Quita nombres de la lista de alias definidos. Si se da la opción -a, se quitan todas las definiciones de alias. El estado de salida es `verdad' a menos que un nombre dado no sea un alias definido.

unset [-fv] [nombre ...]
    Para cada nombre, borra la variable o función correspondiente. Si no se dan opciones, o se da la opción -v, cada nombre se refiere a una variable del shell. Las variables de lectura exclusiva no pueden borrarse. Si se especifica -f, cada nombre se refiere a una función del shell, y se borra la definición de la función. Cada variable o función se quita del entorno pasado a órdenes subsiguientes. Si se quita cualquiera de RANDOM, SECONDS, LINENO, HISTCMD, o DIRSTACK, pierde su propiedad especial, incluso aunque más adelante se vuelva a definir. El estado de salida es `verdad' a menos que nombre no exista o sea de lectura exclusiva.

wait [n]
    Espera al proceso especificado y devuelve su estado de terminación. n puede ser un identificador de proceso (PID) o una especificación de trabajo; si se da una espec. de trabajo, se espera a todos los procesos en la tubería de ese trabajo. Si n no se da, se espera a todos los procesos hijos activos actualmente, y el estado de retorno es cero. Si n especifica un proceso o trabajo no existente, el estado de retorno es 127. De otro modo, el estado de retorno es el estado de salida del último proceso o trabajo al que se esperó.

SHELL RESTRINGIDA

Si bash se arranca con el nombre rbash, o se da la opción -r en la llamada, el shell se convierte en restringido. Un shell restringido se emplea para establecer un ambiente más controlado que el que el shell estándar proporciona. Se comporta de forma idéntica a bash con la excepción de que lo siguiente no está permitido o no se realiza:

•   cambiar de directorio con cd

•   establecer o anular los valores de SHELL o de PATH

•   especificar nombres de órdenes que contengan /

•   especificar un nombre de fichero que contenga al menos una / como un argumento de la orden interna . (source)

•   importar definiciones de funciones desde el entorno del shell en el arranque

•   analizar el valor de SHELLOPTS desde el entorno del shell en el arranque

•   redirigir la salida usando los operadores de redirección >, >|, <>, >&, &>, y >>

•   utilizar la orden interna exec para reemplazar el shell por otro programa

•   añadir o eliminar órdenes incorporadas con las opciones -f o -d de la orden interna enable.

•   dar la opción -p a la orden interna command.

•   desactivar el modo restringido con set +r o set +o restricted.

Estas restricciones entran en vigor después de que se lean los ficheros de arranque que hubiera.

Cuando se ejecuta una orden que resulta ser un guión del shell (vea EJECUCIÓN DE ÓRDENES arriba), rbash desactiva todas las restricciones en el shell lanzado para ejecutar el guión.

VÉASE TAMBIÉN
Bash Features (Características de Bash), Brian Fox & Chet Ramey
The Gnu Readline Library (La Biblioteca Readline de GNU), Brian Fox & Chet Ramey
The Gnu History Library (La Biblioteca de Historia de GNU), Brian Fox & Chet Ramey
Portable Operating System Interface (POSIX) Part 2: Shell and Utilities (Interfaz para Sistemas Operativos Transportables (POSIX) Parte 2: Shell y Utilidades), IEEE
zsh(1), ash(1), sh(1), ksh(1), csh(1), tcsh(1).
emacs(1), vi(1)
readline(3)

FICHEROS
La imagen ejecutable de bash
El fichero de inicio general, leído en shells de entrada
El fichero de inicio personal, leído para shells de entrada
El fichero individual de arranque para shells interactivos
El fichero de inicio individual de readline

AUTORES
Brian Fox, Free Software Foundation
bfox@gnu.ai.MIT.Edu

Chet Ramey, Case Western Reserve University
chet@ins.CWRU.Edu

Traducción al español: Gerardo Aburruzaga García, para el proyecto PAMELI.
Gerardo@CICA.es

INFORMES DE FALLOS
Si Ud. encuentra un fallo en bash, debería informar de ello. Pero primero debería asegurarse de que realmente es un fallo, y de que aparece en la última versión de bash que tenga.

Una vez que Ud. ha determinado que realmente existe un fallo, utilice la orden bashbug para enviar el informe correspondiente. Si Ud. ha encontrado cómo corregirlo, ¡se le anima a que nos mande también la corrección! Las sugerencias y los informes de fallos `filosóficos' se pueden enviar por correo electrónico a bug-bash@gnu.org o se pueden publicar en el grupo de discusiones de Usenet gnu.bash.bug.

TODOS los informes de fallos deben incluir:

El número de versión de bash
El tipo de computador (hardware) y el sistema operativo
El compilador que se empleó para compilarlo
Una descripción del comportamiento del fallo
Un corto guión o `receta' para reproducir el fallo

bashbug inserta automáticamente los tres primeros puntos en la plantilla que proporciona para escribir el informe del fallo.

Los comentarios e informes de fallos que conciernan a esta página de manual deben dirigirse a chet@ins.CWRU.Edu.

Los relativos a la traducción de esta página deben dirigirse a gerardo@cica.es o discutirse en el marco del proyecto PAMELI; contacte con nosotros en http://elcano.dif.um.es/~piernas/manpages-es.

FALLOS

Es demasiado grande y demasiado lento.

Hay algunas sutiles diferencias entre bash y versiones tradicionales del shell de Bourne sh, mayormente debidas a la especificación POSIX.

Los alias son confusos en algunos casos.

Las órdenes internas del shell y las funciones no son interrumpibles/rearrancables.

Las órdenes compuestas y las secuencias de órdenes de la forma `a ; b ; c' no se manejan de forma muy elegante cuando se intenta suspender el proceso. Cuando un proceso es parado, el shell ejecuta inmediatamente la siguiente orden de la secuencia. Para remediar esto es suficiente poner la secuencia de órdenes entre paréntesis; así la forzamos a ejecutarse en un subshell, que puede pararse como una unidad.

Las órdenes dentro de una sustitución de orden de tipo $(...) no se analizan hasta que se intenta la sustitución. Esto provocará un retraso en la aparición de mensajes posibles de error hasta algún tiempo después de que se introduzca la orden.

Las variables de tipo vector no pueden (aún) exportarse.